Написать программу, принимающую на вход число, которое будет ограничивать диапазон случайно генерируемого числа. Затем пользователь вводит любое число до первого введенного и программа выдает, введенное число больше или меньше сгенерированного. Если пользователь ввел число, совпадающее, то программа выводит, за сколько шагов пользователь угадал число и поздравляет его с победой. Если дописать алгоритм, автоматически находящий это число за количество шагов меньшее, чем четверть диапазона, то билет зачтется автоматом.
Например, пользователь ввел диапазон «1000». Программа генерирует одно случайное число от 0 до 1000. Пусть будет 789. Затем пользователь вводит «12», пытаясь угадать. 12 меньше, чем 789, программа выдает «Ваше число меньше». И так далее. Автоматический алгоритм должен найти сгенерированное число меньше, чем за 1000/4 = 250 шагов. Если диапазон будет 100, то число шагов ограничивается 25, и так далее.
На языке C
Ответ
4 (2 оценки)
0
armanelaoztl7s 2 месяца назад
Светило науки - 30 ответов - 72 помощи

#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;

}

Ответ
0 (0 оценок)
0
gguketosl 2 месяца назад
Светило науки - 519 ответов - 0 раз оказано помощи

Ответ:

@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 шагов.

Остались вопросы?