Имеет смысл воспользоваться методом "дихотомии" (деления пополам). если с днем рождения все понятно: в году максимум 366 дней и требуется определить нужный, то непонятно, как быть с загаданным учеником - их условно пронумеровать и спрашивать о номере? поэтому принимаем такое решение. мы делим список учеников на два части (например, написав сведения о каждом на отдельной карточке и разложив эти карточки на две равные кучки по 560/2 = 280 человек в каждой. затем задаем вопрос: загаданный ученик находится в первой кучке? по результатам ответа кучку, содержащую загаданного ученика, снова делим пополам. процесс повторяем пока не останется одна карточка. аналогично поступаем с датами рождения. тогда количество вопросов определится, как степень числа 2, число, не меньшее количества учеников (дней рождения). 2⁹ < 560 < 2¹⁰, поэтому ученик будет угадан максимум за 10 вопросов. 2⁸ < 366 < 2⁹, поэтому день рождения будет угадан максимум за 9 вопросов. в сумме потребуется задать не более 9+10 = 19 вопросов. конечно, можно придумать более продвинутую систему, когда на карточках учеников будут указаны одновременно и даты их рождения, тогда количество вопросов можно снизить.
Matveevanastya0170
05.08.2020
// pascalabc.net 3.1, сборка 1219 от 16.04.2016 var n,k,d: integer; begin k: =0; repeat write('введите натуральное число, 0- завершить: '); read(n); if n> 0 then begin d: =(n mod 100) div 10; if (d=4) or (d=6) then inc(k) end until n=0; writeln('искомых чисел - ',k) end. тестовое решение: введите натуральное число, 0- завершить: 345 введите натуральное число, 0- завершить: 6285 введите натуральное число, 0- завершить: 7854 введите натуральное число, 0- завершить: 1324 введите натуральное число, 0- завершить: 653 введите натуральное число, 0- завершить: 66666 введите натуральное число, 0- завершить: 0 искомых чисел - 2
Ответить на вопрос
Поделитесь своими знаниями, ответьте на вопрос:
Правило преобразования числовой информации 1-1; 2-1; 3-1; 4-1; 10-2; 11-2; 100-3.
кол-во цифр в числе