Advertisement
tryblyat

Untitled

Mar 31st, 2020
108
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.45 KB | None | 0 0
  1. #include <iostream>
  2. #include <ctime>
  3. #include <cstring>
  4.  
  5. using namespace std;
  6.  
  7. int const n = 4;
  8.  
  9. //Петров Даниил, ИП-912//
  10.  
  11. char digit[11] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '\0'};
  12.  
  13. void fillrand(char a[]) { //функция загадывания числа без повторяющихся цифр в числе
  14. srand(time(nullptr));
  15. bool there;
  16. int element;
  17. for (int i = 0; i < n;) {
  18. there = false;
  19. element = rand() % 9; //создаем рандомное число
  20. for (int j = 0; j < i; ++j) {
  21. if (a[j] == (element + '0')) { //если уже есть в массиве, то истина
  22. there = true;
  23. break;
  24. }
  25. }
  26. if (!there) { //записать в массив, если не нашлось повторений
  27. a[i] = element + '0';
  28. ++i;
  29. }
  30. }
  31. }
  32.  
  33. void print(char a[]) { //функция вывода числа
  34. for (int j = 0; j < n; ++j) {
  35. cout << a[j];
  36. }
  37. cout << endl;
  38. }
  39.  
  40. int write(char a[], const char b[]) {//функция записи числа пользователем и проверкой на корректность
  41. char arr[20];
  42. int j = 0, k = 0;
  43. cin >> arr;
  44. int size = strlen(arr); //считаем длину числа
  45. for (int i = 0; i < n; ++i) {
  46. a[i] = arr[i];
  47. }
  48. if (size != 4) { //если не 4-значное просим ввести число заново
  49. cout << "Enter four-digit number, please: ";
  50. return -1;
  51. } else {//проверяем 4-значное ли оно
  52. for (int i = 0; arr[i] != '\0'; ++i) {
  53. while (b[j] != '\0') {
  54. if (arr[i] == b[j])
  55. ++k;
  56. ++j;
  57. if (k == 1) break;
  58. }
  59. if (k == 0) {
  60. cout << "Enter again, please: ";
  61. return -1;
  62. }
  63. j = 0;
  64. k = 0;
  65. }
  66. for (int i = 0; arr[i] != '\0'; ++i) { //обвчное заполнение через остакток от деления на 10 и делением числа на 10
  67. for (j = 0; j < i; ++j) {
  68. if (arr[i] == arr[j]) { //проверка если есть поторяющиеся цифры в числе
  69. cout << "Enter again, please: ";
  70. return -1;
  71. }
  72. }
  73. }
  74. return 1;
  75. }
  76. }
  77.  
  78. void correct(char a[], const char b[]) { //функция корректного ввода
  79. int k;
  80. do {
  81. k = write(a, b);
  82. } while (k != 1);
  83. }
  84.  
  85. void
  86. check(const char comp[], char hum[], const char b[]) { //функция проверки числа на совпадение чисел и позций этих чисел
  87. int bulls = 0, cows = 0;
  88. while (true) { //пока не угадали число
  89. for (int i = 0; i < n; ++i) {
  90. for (int j = 0; j < n; ++j) {
  91. if (i != j) { //чтобы не сравнивать одни и те же элементы
  92. if (hum[i] == comp[j]) { //если совпали увеличиваем счетчик коров
  93. ++cows;
  94. }
  95. } else { //если совпали элементы на одинаковых позициях увеличиваем счетчик быков
  96. if (hum[i] == comp[j])
  97. ++bulls;
  98. }
  99. }
  100. }
  101. if (bulls == 4) { //если все позиции совпали, то число отгадано
  102. cout << "Victory!";
  103. break;
  104. }
  105. cout << "bulls: " << bulls << endl << "cows: " << cows
  106. << endl; //если не удалось отгадать снова вводим число и начинаем заново
  107. cout << "Try again, please: ";
  108. correct(hum, b);
  109. bulls = 0; //обнуляем счетчики после введения нового числа
  110. cows = 0;
  111. }
  112.  
  113. }
  114.  
  115. int main() {
  116. cout << "Number guessed try guessing it!" << endl << "Your number: " << endl;
  117. char number[n], arry[n];
  118. fillrand(number);
  119. print(number);
  120. correct(arry, digit);
  121. print(arry);
  122. check(number, arry, digit);
  123. return 0;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement