Например, пользователь ввел диапазон «1000». Программа генерирует одно случайное число от 0 до 1000. Пусть будет 789. Затем пользователь вводит «12», пытаясь угадать. 12 меньше, чем 789, программа выдает «Ваше число меньше». И так далее. Автоматический алгоритм должен найти сгенерированное число меньше, чем за 1000/4 = 250 шагов. Если диапазон будет 100, то число шагов ограничивается 25, и так далее.
На языке C
Ответ:
@C
----------------------------------------------------------------------------------------------------------
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main() {
int range, guess, number, steps = 0;
srand(time(0)); // Инициализация генератора случайных чисел
printf("Введите максимальное число для диапазона: ");
scanf("%d", &range);
number = rand() % (range + 1); // Генерация случайного числа в заданном диапазоне
printf("Угадайте число от 0 до %dn", range);
do {
printf("Введите число: ");
scanf("%d", &guess);
steps++;
if (guess > number) {
printf("Ваше число больше.n");
} else if (guess < number) {
printf("Ваше число меньше.n");
}
} while (guess != number);
printf("Поздравляем! Вы угадали число за %d шагов.n", steps);
// Алгоритм автоматического поиска
int auto_guess = range / 2;
int min = 0;
int max = range;
int auto_steps = 0;
while (auto_guess != number) {
auto_steps++;
if (auto_guess > number) {
max = auto_guess - 1;
} else {
min = auto_guess + 1;
}
auto_guess = (min + max) / 2;
}
printf("Алгоритм нашел число %d за %d шагов.n", number, auto_steps);
return 0;
}
--------------------------------------------------------------------------------------
Пример работы:
Введите максимальное число для диапазона: 1000
Угадайте число от 0 до 1000
Введите число: 360
Ваше число меньше.
Введите число: 999
Ваше число больше.
Введите число: 800
Ваше число больше.
Введите число: 700
Ваше число больше.
Введите число: 600
Ваше число больше.
Введите число: 500
Ваше число меньше.
Введите число: 501
Ваше число меньше.
Введите число: 502
Ваше число меньше.
Введите число: 503
Ваше число меньше.
Введите число: 504
Ваше число меньше.
Введите число: 505
Ваше число меньше.
Введите число: 506
Ваше число меньше.
Введите число: 570
Ваше число меньше.
Введите число: 580
Ваше число больше.
Введите число: 571
Ваше число меньше.
Введите число: 572
Ваше число меньше.
Введите число: 573
Поздравляем! Вы угадали число за 17 шагов.
Алгоритм нашел число 573 за 7 шагов.
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int generate_random_value(int range) {
srand(time(NULL));
return rand() % range + 1;
}
void hand_guess(int inputValue, int randomValue) {
int counter = 1;
while (inputValue != randomValue) {
if (inputValue < randomValue) {
printf("Ваше число меньшеn");
} else {
printf("Ваше число большеn");
}
printf("Введите предполагаемое число: ");
scanf("%d", &inputValue);
counter++;
}
printf("Победа! Угаданное число %d за %d шаговn", randomValue, counter);
}
void computer_guess(int aimValue, int range) {
int low = 1;
int high = range;
int counter = 0;
while (low <= high) {
int mid = (low + high) / 2;
counter++;
if (mid == aimValue) {
printf("Алгоритм угадал число %d за %d попыток из %dn", aimValue, counter, range / 4);
return;
} else if (mid < aimValue) {
printf("Алгоритм назвал число меньшеn");
low = mid + 1;
} else {
printf("Алгоритм назвал число большеn");
high = mid - 1;
}
}
}
int main() {
int range;
printf("Введите диапазон для генерации: ");
scanf("%d", &range);
if (range <= 0) {
printf("Ошибка: Диапазон должен быть больше 0n");
return 1;
}
int randomValue = generate_random_value(range);
int inputValue;
printf("Введите предполагаемое число (-1 для использования автоматического алгоритма): ");
scanf("%d", &inputValue);
if (inputValue != -1) {
hand_guess(inputValue, randomValue);
} else {
computer_guess(randomValue, range);
}
return 0;
}