0 / 0 / 0
Регистрация: 29.05.2016
Сообщений: 27
1

Отгадать загаданное число

12.06.2016, 21:35. Показов 19711. Ответов 10
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте,помогите пожалуйста написать код.Вася загадал число от 1 до N. За какое наименьшее количество вопросов (на которые Вася отвечает "да" или "нет") Петя может угадать Васино число?
Входные данные
Вводится одно число N

Выходные данные
Выведите наименьшее количество вопросов, которого гарантированно хватит Пете, чтобы угадать Васино число.

Примеры
входные данные
5
выходные данные
3
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
12.06.2016, 21:35
Ответы с готовыми решениями:

Пользователь должен число отгадать не более чем за 10 попыток
3. В программе генерируется случайное целое число от 25 до 35. Пользователь должен его отгадать не...

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

Цикл. Программа, угадывающая число, загаданное пользователем.
составить программу где пользователь загадывает число от 0 до 16, а программа угадывает его по...

Составить программу отгадывающую натуральное четное число загаданное пользователем
составить программу отгадывающую натуральное четное число загаданное пользователем. Загадайте...

Отгадать целое число, которое "загадал" компьютер в определенном диапазоне
Отгадать целое число, которое "загадал" компьютер в определенном диапазоне в диапазоне от 1 до 100....

10
Эксперт С++
1624 / 954 / 782
Регистрация: 06.02.2016
Сообщений: 2,452
Записей в блоге: 31
13.06.2016, 11:08 2
Решается бинарным(двоичным) поиском с подсчётом итераций
Pascal
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
const
  size = 1000;
 
type
  am = array[1..SIZE] of integer;
 
var
  a: am; x, m, n, count, first, last: integer; i, j: byte;
  found: boolean;
 
begin
  randomize;
  ReadLn(n);
  for i := 1 to n do
    a[i] := i;
  
  m :=random(n-1+1)+1;
  
  for i := 2 to n do                         
    for j := n downto i do                    
      if a[j - 1] > a[j] then begin
        x := a[j - 1];
        a[j - 1] := a[j];
        a[j] := x;
      end;     
  count := 0;
  First := 1;
  Last := n;
  Found := False; 
  
  repeat 
    i := (First + Last) div 2; 
    if a[i] = m then Found := True
    else
    begin
      if a[i] > m then First := i + 1 
      else Last := i - 1; 
    end;
    count := count + 1; 
  until (Found) or (First > Last);  
if Found then
else 
  Writeln('Поиск выполнен за ', count);
end.
1
Платежеспособный зверь
8926 / 4354 / 1642
Регистрация: 28.10.2009
Сообщений: 11,568
13.06.2016, 11:27 3
Лучший ответ Сообщение было отмечено Maxim35 как решение

Решение

Peoples, всё гораздо проще.
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
var
n,m,k:integer;
begin
readln(n);
k:=0;
m:=1;
while m<n do
begin
m:=m*2;
inc(k);
end;
writeln(k);
end.
3
0 / 0 / 0
Регистрация: 10.03.2019
Сообщений: 16
04.08.2019, 16:35 4
кот Бегемот, Почему нужно умножать на 2?
0
Заблокирован
04.08.2019, 18:57 5
ну можно (n:=n div 2)>0
0
Платежеспособный зверь
8926 / 4354 / 1642
Регистрация: 28.10.2009
Сообщений: 11,568
04.08.2019, 20:20 6
кот Бегемот, Почему нужно умножать на 2?
Потому что за 1 правильный вопрос мы сокращаем количество оставшихся чисел в два раза, пока не останется одно. Умножая единицу на 2 мы идём в обратную сторону, пока не придём к исходному количеству чисел.
0
5077 / 2649 / 2349
Регистрация: 10.12.2014
Сообщений: 10,026
05.08.2019, 03:59 7
Можно ещё сократить число переменных:
Pascal
1
2
3
4
5
6
7
8
9
10
11
var n, c : Integer;
begin
  Read(n);
  c := 0;
  while n > 0 do
    begin
      n := n shr 1;
      inc(c);
    end;
  Write(c);
end.
0
Платежеспособный зверь
8926 / 4354 / 1642
Регистрация: 28.10.2009
Сообщений: 11,568
05.08.2019, 16:04 8
JuriiMW, к сожалению, ваша программа неверна.
0
0 / 0 / 0
Регистрация: 18.04.2020
Сообщений: 1
18.04.2020, 18:28 9
Ответ одной строкой - это log2(n), округлённый в большую сторону.
0
8 / 8 / 0
Регистрация: 18.09.2023
Сообщений: 86
21.12.2023, 18:47 10
Цитата Сообщение от JuriiMW Посмотреть сообщение
Можно ещё сократить число переменных:
да. до нуля.
Pascal
1
2
### 
print(1+trunc(log(ri)/log(2)));
Добавлено через 3 минуты
Цитата Сообщение от кот Бегемот Посмотреть сообщение
Peoples, всё гораздо проще.
намного
0
Модератор
9855 / 5225 / 3304
Регистрация: 17.08.2012
Сообщений: 15,986
21.12.2023, 21:49 11
agvego5, здесь общий раздел паскаля, а не раздел Pascal ABC.NET. Будьте внимательнее.
0
21.12.2023, 21:49
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
21.12.2023, 21:49
Помогаю со студенческими работами здесь

Отгадать число загаданное программой
Доброго времени суток. Необходимо отгадать случайное число загаданное программой, при этом если...

Отгадать загаданное число за наименьшее количество вопросов
Вася загадал число от 1 до N. За какое наименьшее количество вопросов (на которые Вася отвечает...

Отгадать число,загаданное компьютером максимум за 3 попытки
domains int = integer predicates ask(int) check(int,int) popitka(int,int) clauses ...

В этой задаче вам предстоит отгадать число, загаданное жюри. Жюри загадало число от 1 до 100 включительно
Требуется отгадать его за неболее чем 30 попыток. А именно, есть объект типа BlackBox class...

загаданное число
помогите закончить программу int rNum,x; srand(time(0)); rNum = 1 + rand() % (10); cout...

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


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru