Вот задача:
Угадать число, которое загадал пользователь, используя только инструкцию 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
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;
}
ответ дан 16 фев 2020 в 18:33
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.
- Пока счетчик попыток меньше, либо равен 10
- запрашивать у пользователя очередное число,
- если оно больше загаданного, то выводить «много»,
- если оно меньше загаданного, то выводить «мало»,
- иначе сообщать, что число угадано и прерывать выполнение цикла,
- увеличивать счетчик попыток на единицу.
- После цикла, если число не было угадано, то вывести сообщение о том, что попытки исчерпаны, и какое число было загадано компьютером.
Самый верный способ отгадать число менее чем за 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
Язык Си
#includemain() {
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.» Немного подвис над ней, не пойму каким боком использовать здесь операторы сравнения? Написал прогу без их использования, но с вводом ответов пользователем:
Работает мягко говоря через раз… например, если я загадываю число 46, то диапазон становится неизменным и равным [46 : 47], и до истины дело так и не доходит. Может условие выхода из цикла у меня неверное? Или вообще условие задачи я не так понял. Буду благодарен, если что-нибудь посоветуете.
0 |
Programming Эксперт 94731 / 64177 / 26122 Регистрация: 12.04.2006 Сообщений: 116,782 |
08.11.2011, 19:26 |
Ответы с готовыми решениями:
7 |
talis 794 / 546 / 61 Регистрация: 11.05.2010 Сообщений: 1,298 Записей в блоге: 1 |
||||
08.11.2011, 21:38 |
2 |
|||
Решение
Вот так. Это классический бинарный поиск.
4 |
JustAndEasy 1 / 1 / 0 Регистрация: 08.04.2017 Сообщений: 1 |
||||
09.04.2017, 01:54 |
3 |
|||
Мне стало интересно, взглянуть на решения задачек из книги Страуструпа другими читателями и сравнить их со своими. 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 |
|||
Еще один варик с векторами
Миниатюры
0 |
Krekcer 2 / 2 / 0 Регистрация: 06.09.2014 Сообщений: 28 |
||||
16.08.2017, 16:46 |
6 |
|||
Вот моё решение. Здесь создана рекурсивная функция для отгадывания числа. Может быть не самый лучший вариант, но почему-то рекурсия мне первой пришла в голову. Ну, и здесь зато используются if-else-if конструкция
0 |
NicJag 3 / 3 / 0 Регистрация: 28.02.2018 Сообщений: 4 |
||||
08.02.2020, 19:04 |
7 |
|||
0 |
skelet_on_V 0 / 0 / 0 Регистрация: 25.02.2021 Сообщений: 2 |
||||
30.05.2021, 10:54 |
8 |
|||
0 |
IT_Exp Эксперт 87844 / 49110 / 22898 Регистрация: 17.06.2006 Сообщений: 92,604 |
30.05.2021, 10:54 |
8 |