Угадать число которое загадал пользователь используя только инструкцию if else

Вот задача:
Угадать число, которое загадал пользователь, используя только инструкцию if-else.
Число должно быть в диапазоне от 0 до 10ти.
Вот код:

#include <stdio.h>

int main() {
    int a;
    printf("Да это 1 , нет это 0\nЭто число 6 ?\n");
    scanf("%d", &a);
    if (a == 1)
        printf("Ваше число 6\n");
    else
        printf("Это число 1 ?\n");
        scanf("%d", &a);
        if (a == 1)
            printf("Ваше число 1\n");
            return 0;
        else
            printf("Это число 10 ?\n");
            scanf("%d", &a);
            if (a == 1)
                printf("Ваше число 10\n");
            else
                printf("Это число 2?\n");
                scanf("%d", &a);
                if (a == 1)
                    printf("Ваше число 2\n");
                else
                    printf("Это число 3 ?\n");
                    scanf("%d", &a);
                    if (a == 1)
                        printf("Ваше число 3\n");
                    else
                        printf("Это число 4?\n");
                        scanf("%d", &a);
                        if (a == 1)
                            printf("Ваше число 4\n");
    return 0;                       
}

задан 16 фев 2020 в 18:15

Barys6's user avatar

4

#include <stdio.h>

int main() 
{

    int a;

    printf_s("Да это 1 , нет это 0\nЭто число 6 ?\n");
    scanf_s("%d", &a);
    if (a == 1)
        printf("Ваше число 6\n");
    else
    {
        printf("Это число 1 ?\n");
        scanf_s("%d", &a);
        if (a == 1)
            printf("Ваше число 1\n");
        else
        {
            printf("Это число 10 ?\n");
            scanf_s("%d", &a);
            if (a == 1)
                printf("Ваше число 10\n");
            else
            {
                printf("Это число 2?\n");
                scanf_s("%d", &a);
                if (a == 1)
                    printf("Ваше число 2\n");
                else
                {
                    printf("Это число 3 ?\n");
                    scanf_s("%d", &a);
                    if (a == 1)
                        printf("Ваше число 3\n");
                    else
                    {
                        printf("Это число 4?\n");
                        scanf_s("%d", &a);
                        if (a == 1)
                            printf("Ваше число 4\n");
                        else
                            printf("Дописать для 5,7,8 если я верно понял задачу, угадайка методом перебора это конечно что то новое");
                    }
                }
            }
        }
    }
    return 0;

}

Suvitruf - Andrei Apanasik's user avatar

ответ дан 16 фев 2020 в 18:33

Kirzzz's user avatar

KirzzzKirzzz

4212 серебряных знака9 бронзовых знаков

0

Цитата

Угадать число, которое загадал пользователь,используя только инструкцию if-else

Код программы:

Код

static int MAX = 10; //число попыток

int gamer() //угадывает игрок
{
    int i, b = 1 + rand() % 1001, r;
    cout << «Попробуйте угадать число от единицы до 1 милиона. У тебя 10 попыток.» << endl;
    cout << «Введите число: «; cin >> r;
    for (i = 1; i < MAX; i++)
    {
  hi:
  if (r < 1 || r > 1001) { goto hi; }
  else if (r < b)
  {
   cout <<«Введенное вами число меньше загаданного» << endl << «Введите число: «; cin >> r;
  }
  else if (r > b)
  {
   cout << «Введенное вами число больше загаданного» << endl << «Введите число: «; cin >> r;
  }
  else if (r == b)
  {
   cout << «Вы угадали загаданное число » << b << » с » << i+1 << » попытки. Поздравляем!» << endl;
   return 0;
  }
    }
    cout << «Сожалением. Вы не смогли угадать число» << endl; return 0;
}

int comp() //угадывает компьютер
{
    int i, b = -1;
    int min = 1, max = 1001;

        while (b < 1 || b > 1000)
    {
  cout << «Введите число, которое будет угадывать компьютер (диапазон от единицы до 1 миллиона). У компьютера 10 попыток. Число: «;
  cin >> b;
    }
    int r = min + rand() % max;
    for (i = 0; i < MAX; i++)
    {
  cout << «Компьютер: мое число — » << r;
  if (r > b)
  {
   if (max > r) { max = r; }
   while (r >= max || r <= min) { r = min + rand() % max; }
   cout << «Игрок: это число больше моего» << endl;
   goto endd;
  }
  else if (r < b)
  {
   if (min < r) { min = r; }
   while (r <= min || r >= max) { r = min + rand() % max; }
   cout << «Игрок: это число меньше моего» << endl;
   goto endd;
  }
  else if (r == b)
  {
   cout << «Компьютер угадал загаданное число » << b << » с » << i + 1 << » попытки. Поздравляем его!» << endl;
   return 0;
  }
    endd:;
    }

    cout << «Сожалением. Компьютер не смог угадать число» << endl; return 0;
}

int main(int argc, char *argv)
{
    setlocale(LC_ALL, «Russian»); start:
    srand(time(NULL));
    cout << » Выберите режим в котором вы хотите играть! (Введите — 1, чтобы начать угадывать числа у компьютера. Введите — 2, чтобы компьютер угадывал число у вас)»;
    cout << » Чтобы завершить игру введите \»exit\». » << endl;
    string ili;
    cin >> ili;

        if (ili == (string)»1″)
    {
  gamer(); goto start;
    }
    else if (ili == (string)»2″)
    {
  comp(); goto start;
    }
    else if (ili == (string)»exit»)
    {
  system(«pause»); return 0;
    }
    else
    {
  cout << «Неправильный ввод.» << endl; goto start;
    }
}

Библиотеки:

Код

#include <fstream>
#include<locale.h>
#include<time.h>
#include <stdlib.h>
#include <stdio.h>
#include <Windows.h>
#include <iostream>
#include <string>
using namespace std;

Тема 2. Условный оператор или оператор ветвления.

Условные операторы являются неотъемлемой частью программ (в том числе при решении задач) на почти всех языках программирования. Стандартным оператором ветвления является оператор if и его продолжение else. В ряде языков программирования кроме if-else предусмотрены и другие операторы ветвления. В Pascal это оператор выбора case. Однако он используется куда реже, так как удобен лишь в особых случаях и не такой гибкий как if.

Задача  1.
Вводится натуральное число. Найти сумму четных цифр, входящих в его состав.
РЕШЕНИЕ:
var
n: longint;
    sum: integer;
begin
    readln(n);   
    sum := 0;
    while n > 0 do begin
        if n mod 10 mod 2 = 0 then
            sum := sum + n mod 10;
        n := n div 10;
    end;    
    writeln(sum);
end.

Задача 2.

Написать программу, подсчитывающую количество четных и нечетных цифр в числе.

РЕШЕНИЕ:

var
            a: integer;
            even,odd: byte;
begin
            readln(a);
            even := 0;
            odd := 0;
            while a > 0 do begin
                        if (a mod 2) = 0 then
                                     even := even + 1
                        else
                                     odd := odd + 1;
                        a := a div 10;
            end;
            writeln('even: ', even);
            writeln('odd: ', odd);
end.

Задача 3.

Угадать число, которое загадал пользователь, используя только инструкцию if-else.

РЕШЕНИЕ:

var
            n: char;
begin
            write('Think of a number of from 1 to 5 and press Enter');
            readln;

            write('The number more then 3? (y/n) '); readln(n);
            if n = 'y' then begin
                        write('The number is 4? (y/n) '); readln(n);
                        if n = 'n' then
                                     writeln('The number is 5.');
            end
            else begin
                        write('The number is 1? (y/n) '); readln(n);
                        if n = 'n' then begin
                                     write('The number is 2? (y/n) '); readln(n);
                                     if n = 'n' then
                                                 writeln('The number is 3.');
                        end;
            end;
            writeln('Guessed!');
end.

Задача 4

Пример программы, позволяющей вычислять площади трех геометрических фигур: прямоугольника, треугольника и круга.

РЕШЕНИЕ:

Площадь прямоугольника: area = a * b Площадь треугольника: area = sqrt(s * (s – a) * (s – b) * (s – c)), где s = (a + b + c) / 2 Площадь круга: area = pi * sqr(d) / 4

Пользователь осуществляет выбор фигуры, площадь которой он хочет получить, путем ввода цифр 1, 2 или 3. Для выбора ветви вычисления используется конструкция if-else, которая включает вторую конструкцию if-else, а та, в свою очередь, — третью:

if 1 then
const
    pi = 3.14;

var
    figure: byte;
    area, s, a, b, c, d: real;
    ok: boolean;

begin
   ok := true;
write('Фигура  (1 - прямоугольник, 2 - треугольник',
   ', 3 - круг): ');
readln(figure);

   if figure = 1 then begin
      write('Длины сторон: ');
      readln(a, b);
      area := a * b
   end
   else
      if figure = 2 then begin
         write('Длины сторон: ');
         readln(a, b, c);
         s := 0.5 * (a + b + c);
         area := sqrt(s * (s - a) * (s - b) * (s - c))
end
      else
         if figure = 3 then begin
            write('Диаметр: ');
            readln(d);
            area := pi * sqr(d) / 4
         end
         else
            ok := false;

   if ok then
      writeln('Площадь: ', area:8:2)
   else
      writeln('Ошибка ввода');

readln
end.

Примечания:

При вводе сторон треугольника должно быть соблюдено правило: сумма любых двух сторон должна быть больше третьей. Иначе возникает ошибка.

Задача 5

Определить, кратно ли заданное число трем; если нет, вывести остаток.

РЕШЕНИЕ:

var
    num, modulo: integer;
begin
    write('Number: ');
    readln(num);
    modulo:= num mod 3;
    case modulo of
        0: writeln(num,' divisible by 3');
        1: writeln(num,' is not divisible by 3, the remainder is equal 1');
        2: writeln(num,' is not divisible by 3, the remainder is equal 2');
end;
end.

Задания по теме для самостоятельного решения.

  • Проверить трехзначное число на четность и найти сумму его цифр, если число четное, или произведение его цифр, если число нечетное.
  • Сгенерировать случайное трехзначное число, оканчивающееся на ноль.
  • Определить, является ли год, который ввел пользователем, високосным или невисокосным.
  • Вводятся три целых числа. Определить какое из них наибольшее.
  • Найти корни квадратного уравнения и вывести их на экран, если они есть. Если корней нет, то вывести сообщение об этом. Конкретное квадратное уравнение определяется коэффициентами a, b, c, которые вводит пользователь.

Перейти к содержанию

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

Просмотров 11.2к. Обновлено

  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

угадать число от 1 до 100 паскаль


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.



Отгадайте число за 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

Язык Си


#include

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

угадать число от 1 до 100 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)

В Питоне есть расширение 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-256


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

Abendstern

3 / 3 / 2

Регистрация: 06.11.2011

Сообщений: 38

1

Программа, угадывающая число

08.11.2011, 19:26. Показов 21411. Ответов 7

Метки нет (Все метки)


Студворк — интернет-сервис помощи студентам

Здравствуйте. Решаю задачку из книги Страуструпа:

«Напишите программу, угадывающую число. Пользователь должен задумать число от 1 до 100, a программа должна задавать вопросы, чтобы выяснить, какое число он задумал (например, ‘Задуманное число меньше 50’). Ваша программа должна уметь идентифицировать число после не более семи попыток. Подсказка: используйте операторы < и =, a также конструкцию if-else.»

Немного подвис над ней, не пойму каким боком использовать здесь операторы сравнения? Написал прогу без их использования, но с вводом ответов пользователем:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#include <iostream>
 
int main()
{
    int lower = 1; // нижняя граница диапазона
    int upper = 100; // верхняя граница 
    int middle; // середина
 
    char answer;
 
    while(lower != upper)
    {
        middle = (upper + lower) / 2;
        std::cout << "Задуманное число меньше " << middle << "? (y/n)";
        std::cin >> answer;
 
        if(answer == 'y')
            upper = middle;
        else
            lower = middle;
 
        std::cout << "[" << lower << " : " << upper << "]\n";
    }
 
    std::cout << "Ваше число =  " << lower << "\n";
    
    system("pause");
    return 0;
}

Работает мягко говоря через раз… например, если я загадываю число 46, то диапазон становится неизменным и равным [46 : 47], и до истины дело так и не доходит. Может условие выхода из цикла у меня неверное? Или вообще условие задачи я не так понял. Буду благодарен, если что-нибудь посоветуете.



0



Programming

Эксперт

94731 / 64177 / 26122

Регистрация: 12.04.2006

Сообщений: 116,782

08.11.2011, 19:26

Ответы с готовыми решениями:

Функция, угадывающая число
Приложение по угадыванию числа, ошибок не выдает, но при работе, а именно при первом вводе…

Дано 2-ух-значное число. Сделать так, чтоб программа преобразовала это число в новое число кол-во десятков
Тоесть, для примера, мы вводим число 23, а программа выводит нам 32 (числа наоборот).

Программа задумывает число от 1 до 10, и предлагает пользователю отгадать число за 5 попыток
В общем нужна помощь по C++:
задали задачку на цикл For, программа должна выдавать таблицу…

Программа, которая вводит число из пяти цифр, разделяет число на отдельные цифры
Напишите программу, которая вводит число из пяти цифр, разделяет число на отдельные цифры и…

7

talis

794 / 546 / 61

Регистрация: 11.05.2010

Сообщений: 1,298

Записей в блоге: 1

08.11.2011, 21:38

2

Лучший ответ Сообщение было отмечено как решение

Решение

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#include <iostream>
 
int main()
{
    int lower = 1; // нижняя граница диапазона
    int upper = 100; // верхняя граница
    int middle; // середина
 
    char answer;
 
    while( lower < upper )
    {
        middle = (upper + lower) / 2;
 
        do
        {
            std::cout << "Is it less or equal then " << middle << "? (y/n)";
            std::cin >> answer;
        }
        while( answer != 'y' && answer != 'n' );
 
        if( answer == 'y' )
            upper = middle;
        else
            lower = middle + 1;
 
        std::cout << "[" << lower << " : " << upper << "]\n";
    }
 
    std::cout << "Your number is  " << upper << "\n";
 
 
    return 0;
}

Вот так. Это классический бинарный поиск.



4



JustAndEasy

1 / 1 / 0

Регистрация: 08.04.2017

Сообщений: 1

09.04.2017, 01:54

3

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
#include "iostream"
 
using namespace std;
 
int main() {
    system("chcp 1251 > text");     // Устанавливаем ввод/вывод консоли на русский язык.
 
    int lower = 1;      // Нижняя граница диапазона чисел.
    int upper = 100;    // Нижняя граница диапазона чисел.
    int middle;         // Середина диапазона чисел.
    int trueNum = 100;  // Правильный ответ.
 
    char answer = ' ';  // Ответ пользователя.
 
    cout << "Загадайте в уме любое целое число от 1 до 100, а я узнаю его всего за 7 простых вопросов :)" << endl;
    cout << "Готовы? (y/n) ";
    cin >> answer;
    cout << endl;
 
    // Высчитываем правильное число.
    for (int i = 1; i <= 7; i++) {
 
        middle = (lower + upper) / 2;                   // Определение середины диапазона чисел.
 
        cout << "Ваше число больше " << middle << "? (y/n) ";
        cin >> answer;
 
        if (answer == 'y') {
            lower = middle;                             // Присваиваем новую нижнею границу диапазона чисел.
        } 
        else if (answer == 'n') {
            upper = middle;                             // Присваиваем новую верхнею границу диапазона чисел.
            if (middle < trueNum) trueNum = middle;     // Определяем правильное число.
        }
    }
 
    // Вывод в консоль правильного числа.
    cout << endl << "Ваше число " << trueNum << " верно? (y/n) ";
    cin >> answer;
 
    if (answer == 'y') {
        cout << endl << "Ура!!!  Я красавчик )))" << endl;
    }
    else if (answer == 'y') {
        cout << endl << "Ну нееет, как такое ВООБЩЕ возможно :(" << endl;
    }
    cout << endl << "Введите любой символ, чтобы выйти... ";
    cin >> answer;
 
    return 0;
}

Мне стало интересно, взглянуть на решения задачек из книги Страуструпа другими читателями и сравнить их со своими.
Поэтому вот мой вариант решения одной из них, может кому-то также интересно по сравнивать.

PS. Вариант решения от talis не верно угадывает число. Есть доля сомнения что это не так и я просто, что то не понял, потому-что я только начал изучать С++ и могу в чем то ошибаться, но мои числа он не отгадывает :)



1



0 / 0 / 0

Регистрация: 05.04.2017

Сообщений: 6

13.04.2017, 15:53

4

получится правильно хоть там в условии (upper + middle ) /2 дает ответ типа : double , переменная middle объявлена как int — целое, что приведет к ответу 101:2 = 50 , а не 50.5 сужение типов , что — то в этом духе в общем XD



0



MasteRX

11 / 33 / 15

Регистрация: 29.04.2014

Сообщений: 223

26.06.2017, 15:20

5

Еще один варик с векторами

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
#include "C:\Users\kip\Documents\Visual Studio 2012\Projects\std_lib_facilities.h"
 
using namespace std;
 
void OutputV(vector<int>);
void FindNumber(vector<int>&);
 
int main()
{
    setlocale(LC_ALL,"Russian");
 
    cout<<"___Программа для чисел от 1 до 100___\n\n"<<endl;
 
    vector<int> v;
    int numbers;
    for(int i=0;i<100;i++)
    {
        v.push_back(i+1);
    }
 
    int attempts=1;
    while(true)
    {
        FindNumber(v);
        cout<<"Attempt№ = "<<attempts++<<endl;
    }
 
    keep_window_open();
    
    system("cls");
 
    return 0;
}
 
void FindNumber(vector<int>& v)
{
    string answer;
    if((v.size()==1)||(v.size()==2))
    {
        if(v.size()==2)
        {
            cout<<"Число больше "<<v[(v.size()-1)-v.size()/2]<<"?:";
            cin>>answer;
            if(answer=="y"||answer=="Y")
            {cout<<"Это число: "<<v[1];}
            else
            {cout<<"Это число: "<<v[0];}
        }
        if(v.size()==1)
        {
            cout<<"Это число: "<<v[0];
        }
        keep_window_open();
    }
 
    if((v.size()%2==0)&&(v.size()!=2))
    {
        cout<<"Число больше "<<v[(v.size()-1)-v.size()/2]<<"?:";
        cin>>answer;
        if(answer=="y"||answer=="Y")
        {
            int num_for_findv=v[(v.size()-1)-v.size()/2+1];
            int current_number=v[0];
            while(current_number!=num_for_findv)
            {
                v.erase(v.begin());
                current_number=v[0];
            }
            //OutputV(v);
        }
        else
        {
            if(v.size()!=2)
            {
                int num_for_findv=v[(v.size()-1)-v.size()/2];
                int current_number=v[0];
                while(current_number!=num_for_findv)
                {
                    v.erase(v.end()-1);
                    current_number=v[v.size()-1];
                }
                //OutputV(v);
            }
        }
    }
    else
    {
        if(v.size()!=2)
        {
            cout<<"Число больше "<<v[v.size()/2]<<"?:";
            cin>>answer;
            if(answer=="y"||answer=="Y")
            {
                int num_for_findv=v[v.size()/2+1];
                int current_number=v[0];
                while(current_number!=num_for_findv)
                {
                    v.erase(v.begin());
                    current_number=v[0];
                }
                //OutputV(v);
            }
            else
            {
                int num_for_findv=v[v.size()/2];
                int current_number=v[0];
                while(current_number!=num_for_findv)
                {
                    v.erase(v.end()-1);
                    current_number=v[v.size()-1];
                }
                //OutputV(v);
            }
        }
    }
 
}
 
void OutputV(vector<int> vctr)
{
    cout<<"Текущее состояние вектора:"<<endl;
    for(int i=0;i<vctr.size();i++)
    {
        cout<<"v["<<i<<"] = "<<vctr[i]<<"; "<<endl;
    }
}

Миниатюры

Программа, угадывающая число
 



0



Krekcer

2 / 2 / 0

Регистрация: 06.09.2014

Сообщений: 28

16.08.2017, 16:46

6

Вот моё решение. Здесь создана рекурсивная функция для отгадывания числа. Может быть не самый лучший вариант, но почему-то рекурсия мне первой пришла в голову. Ну, и здесь зато используются if-else-if конструкция
Если за 7 вопросов число так и не отгадано, то программа возвращает промежуток, в котором лежит загаданное число

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
//программа, угадывающая задуманное пользователем число
#include "stdafx.h"
#include <iostream>
 
using namespace std;
 
void guess_number(char ans, unsigned int low, unsigned int high, unsigned int middle, unsigned int count);
 
int main()
{
    cout << "Please create new number from 1 to 100."
        << "\nAnd let me guess it!";
    unsigned int middle = 100;  //для правильной работы начальное значение должно быть = 100
    unsigned int count = 0; //колличество заданных вопросов
    guess_number('Y', 1, 100, middle, count);
    system("pause");
    return 0;
}
 
void guess_number(char ans, unsigned int low, unsigned int high, unsigned int middle, unsigned int count)
{
    //1 аргумент - ответ пользователя: Y (y) или N (n),
    //2 и 3 аргументы - между какими числами находится задуманное число,
    //4 аргумер - для вычисления середины промежутка между low и high
    //5 аргумент - колличество заданных вопросов
    if (ans == 'y' || ans == 'Y')
    {
        if (count <= 7) //максимальное колличество вопросов = 7
        {
            high = middle;
            if (low == (high - 1))
                cout << "\nYour number is " << low << '\n';
            else
            {
                middle = (low + high) / 2;
                cout << "\nIs your number less than " << middle << "? ";
                count++;
                if (high > 2)
                {
                    cin >> ans;
                    guess_number(ans, low, high, middle, count);
                }
                else
                    cout << "Your number is 1!" << '\n';
            }
        }
        else
        {
            if (low == high)
                cout << "\nYour number is " << low << '\n';
            else
                cout << "\nYour number is between " << low << " and " << high << '\n';
        }
    }
    else
        if (ans == 'n' || ans == 'N')
        {
            if (count < 7)
            {
                low = middle;
                if (low == high)
                    cout << "\nYour number is " << low << '\n';
                middle = (low + high) / 2;
                cout << "\nIs your number less than " << middle << "? ";
                count++;
                if (low < 100)
                {
                    cin >> ans;
                    guess_number(ans, low, high, middle, count);
                }
                else
                    cout << "\nYour number is 100!" << '\n';
            }
            else
            {
                if (low == high)
                    cout << "\nYour number is " << low << '\n';
                else
                    cout << "\nYour number is between " << low << " and " << high << '\n';
            }
        }
        else
        {
            cout << "Please enter only Y or N: ";
            cin >> ans;
            count--;
            guess_number(ans, low, high, middle, count);
        }
}



0



NicJag

3 / 3 / 0

Регистрация: 28.02.2018

Сообщений: 4

08.02.2020, 19:04

7

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
//если использовать инструменты из главы
#include "iostream"
using namespace std;
int main()
{
    setlocale(LC_ALL, "Russian");
    system("chcp 1251");
    int x=0;
    int y=100;
    int r;
    char d=' ';
    cout << "ВВедите число от 1 до 100,программа попробует угадать\n";
    cin >> r;
    while (d!='=')
    {
        cout << "Ваше число > или <, а может оно совпадает(=) с -" << (x + y) / 2;
        cin >> d;
        if (d=='>')
        {
            x = (x + y) / 2;
        }
        else if(d=='<')
        {
            y = (x + y) / 2;
        }
        else if (d == '=')
        {
            cout << "Ничоси\n"; 
        }
    }
}



0



skelet_on_V

0 / 0 / 0

Регистрация: 25.02.2021

Сообщений: 2

30.05.2021, 10:54

8

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
#include "C:\Users\Sunrise\source\repos\std_lib_facilities.h"
 
int main() // spent around 8 hours of thinking. experience in programming around 3 days or less
{
    const string YES = "y", NO = "n";
    string answer;
    int x = 50;
    int border1 = 1;
    int border2 = 100;
    int i = 0;
    int j;
    vector<int> numbers;
    while (i < 7)
    {
        cout << "Is number higher than " << x << "?\n";
        numbers.push_back(x);
        cin >> answer;
        if (answer == YES)
        {
            border1 = x;
            j = border2 - border1;
            x = j / 2 + x;
            if (x <= border2 && x >= border1 && i == 6)
                cout << "Number is " << border2;
        }
        else if (answer == NO)
        {
            border2 = x;
            j = border2 - border1;
            x = x - j / 2;
            if (x <= border2 && x >= border1 && i == 6)
                cout << "Number is " << x;
        }
        i++;
    }
    cout << "border1 = " << border1 << ' ' << " border2 = " << border2 << " x = " << x << "\n";
    for (int i = 0; i < numbers.size(); i++)
        cout << numbers[i] << '\n';
    return 0;
}



0



IT_Exp

Эксперт

87844 / 49110 / 22898

Регистрация: 17.06.2006

Сообщений: 92,604

30.05.2021, 10:54

8

Понравилась статья? Поделить с друзьями:
  • Уголь активированный инструкция по применению для детей 3 года
  • Увч 80 новоан эма инструкция
  • Уголь активированный инструкция по применению взрослым таблетки от чего помогает отзывы
  • Уголь активированный инструкция по применению взрослым таблетки при аллергии
  • Уголь активированный для чего применяется взрослым таблетки инструкция по применению взрослым