Угадать случайное число

Задача

В программе генерируется случайное целое число от 0 до 100. Пользователь должен его отгадать не более чем за 10 попыток. После каждой неудачной попытки должно сообщаться больше или меньше введенное пользователем число, чем то, что загадано. Если за 10 попыток число не отгадано, то вывести загаданное число.

Пояснение к задаче и алгоритм решения

  1. Сгенерировать случайное число.
  2. Ввести счетчик попыток. Присвоить ему значение 1.
  3. Пока счетчик попыток меньше, либо равен 10
    1. запрашивать у пользователя очередное число,
    2. если оно больше загаданного, то выводить "много",
    3. если оно меньше загаданного, то выводить "мало",
    4. иначе сообщать, что число угадано и прерывать выполнение цикла,
    5. увеличивать счетчик попыток на единицу.
  4. После цикла, если число не было угадано, то вывести сообщение о том, что попытки исчерпаны, и какое число было загадано компьютером.

Самый верный способ отгадать число менее чем за 10 попыток - это делить диапазон на 2. Например, если число лежит в пределах от 0 до 100, то введя 50 мы сразу сокращаем диапазон поиска в два раза. Если было сказано, что загаданное число меньше 50-ти, то вводим 25 и таким образом снова сокращаем диапазон в 2 раза.

Если следовать этому правилу то потребуется 6-7 попыток, т.к. число 100 (изначальная длина диапазона) лежит в пределах между 26 и 27.

Исходный код на языке программирования Pascal

var n,u,i: byte;
begin
    randomize;
    n := random(100);
    i := 1;
    writeln('Отгадайте число за 10 попыток');
    while i <= 10 do begin
        write(i,'-я попытка: ');
        readln(u);
        if u > n then
            writeln('Много')
        else
            if u < n then
                writeln('Мало')
            else begin
                writeln('Угадано!');
                break;
            end;
        i := i + 1;
    end;
    if i = 11 then
        writeln('Вы не угадали. Было загадано ',n);
end.

Пример(ы) выполнения программы на языке Pascal

Отгадайте число за 10 попыток
1-я попытка: 47
Мало
2-я попытка: 85
Много
3-я попытка: 59
Мало
4-я попытка: 70
Мало
5-я попытка: 78
Много
6-я попытка: 74
Угадано!

Отгадайте число за 10 попыток
1-я попытка: 90
Много
2-я попытка: 80
Много
3-я попытка: 70
Много
4-я попытка: 60
Много
5-я попытка: 50
Мало
6-я попытка: 59
Много
7-я попытка: 58
Много
8-я попытка: 59
Много
9-я попытка: 57
Много
10-я попытка: 56
Много
Вы не угадали. Было загадано 55

Исходный код на языке программирования C

#include <stdio.h>
 
main() {
    srand(time(NULL));
    int n,u,i;
    n = rand() % 100;
    i = 1;
    while (i<=10) {
        printf("%d-я попытка: ", i);
        scanf("%d", &u);
        if (u < n) printf("Мало\n");
        else
            if (u > n) printf("Много\n");
            else {
                printf("Угадано!\n");
                break;
            }
        i += 1;
    }
    if (i == 11)
        printf("Не угадали. Это число %d\n", n);
}

Исходный код на языке программирования Python

from random import random
n = round(random() * 100)
i = 1
print("Компьютер загадал число. Отгадайте его. У вас 10 попыток")
while i <= 10:
    u = int(input(str(i) + '-я попытка: '))
    if u > n:
        print('Много')
    elif u < n:
        print('Мало')
    else:
        print('Вы угадали с %d-й попытки' % i)
        break
    i += 1
else:
    print('Вы исчерпали 10 попыток. Было загадано', n)

Особенности решения на языке программирования Python

В Питоне есть расширение else для цикла while, которое выполняется единожды, когда логическое выражение в заголовке while возвращает ложь.

Исходный код на языке программирования КуМир

алг угадай число
нач
  цел n,u,i
  n := int(rand(0,100))
  i := 1
  вывод "Отгадай число не более чем за 10 попыток", нс
  нц пока i<=10
    вывод i,"-я попытка: "
    ввод u
    если u>n то вывод "Много", нс
     иначе
      если u<n то вывод "Мало", нс
       иначе
        вывод "Угадано!"
        выход
      все
    все
    i := i+1
  кц
  если i = 11 то
    вывод "Вы не угадали число ", n
  все
кон

Исходный код на языке программирования Basic

n = int(rand * 100)
i = 1
print "Угадайте число от 1 до 100"
while i <= 10
        print i + "-я попытка: ";
        input u
        if u < n then
                print "Мало"
        else
                if u > n then
                        print "Много"
                else
                        print "Угадано!"
                        end
                endif
        endif
        i = i + 1
endwhile
if i = 11 then print "Не угадано число " + n

Тема

Циклы

Уровень сложности

Средний

Дата публикации