profile
Размещено 4 месяца назад по предмету Информатика от 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) их не спросили

Информация

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