profile
Размещено 10 месяцев назад по предмету Информатика от xxlse

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

  1. Ответ на вопрос
    Ответ на вопрос дан armanelaoztl7s

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

    }

  2. Ответ на вопрос
    Ответ на вопрос дан gguketosl

    Ответ:

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

Не тот ответ на вопрос, который вам нужен?
Найди верный ответ
Самые новые вопросы
tegysigalpa2012
Русский язык - 5 лет назад

Помогите решить тест по русскому языку тест по русскому языку «местоимение. разряды местоимений» для 6 класса 1. укажите личное местоимение: 1) некто 2) вас 3) ни с кем 4) собой 2. укажите относительное местоимение: 1) кто-либо 2) некоторый 3) кто 4) нам 3. укажите вопросительное местоимение: 1) кем-нибудь 2) кем 3) себе 4) никакой 4. укажите определительное местоимение: 1) наш 2) который 3) некий 4) каждый 5. укажите возвратное местоимение: 1) свой 2) чей 3) сам 4) себя 6. найдите указательное местоимение: 1) твой 2) какой 3) тот 4) их 7. найдите притяжательное местоимение: 1) самый 2) моего 3) иной 4) ничей 8. укажите неопределённое местоимение: 1) весь 2) какой-нибудь 3) любой 4) этот 9. укажите вопросительное местоимение: 1) сколько 2) кое-что 3) она 4) нами 10. в каком варианте ответа выделенное слово является притяжательным местоимением? 1) увидел их 2) её нет дома 3) её тетрадь 4) их не спросили

Информация

Посетители, находящиеся в группе Гости, не могут оставлять комментарии к данной публикации.