Имеет смысл воспользоваться методом "дихотомии" (деления пополам).
Если с днем рождения все понятно: в году максимум 366 дней и требуется определить нужный, то непонятно, как быть с загаданным учеником - их условно пронумеровать и спрашивать о номере?
Поэтому принимаем такое решение. Мы делим список учеников на два части (например, написав сведения о каждом на отдельной карточке и разложив эти карточки на две равные кучки по 560/2 = 280 человек в каждой. Затем задаем вопрос: загаданный ученик находится в первой кучке? По результатам ответа кучку, содержащую загаданного ученика, снова делим пополам. Процесс повторяем пока не останется одна карточка. Аналогично поступаем с датами рождения.
Тогда количество вопросов определится, как степень числа 2, дающая число, не меньшее количества учеников (дней рождения).
2⁹ < 560 < 2¹⁰, поэтому ученик будет угадан максимум за 10 вопросов.
2⁸ < 366 < 2⁹, поэтому день рождения будет угадан максимум за 9 вопросов.
В сумме потребуется задать не более 9+10 = 19 вопросов.
Конечно, можно придумать более продвинутую систему, когда на карточках учеников будут указаны одновременно и даты их рождения, тогда количество вопросов можно снизить.
<h2>Способ 1</h2>
PascalABC позволяет нам писать меньше, понятнее и красивее.
- begin
- var arr := SeqRandomInteger(16, -20, 20).ToArray.Println.Where(x->x < 0).Count.Println;
- end.
<h2>Способ 2</h2>
Старее этого только динозавры.
1. d:\Task\Физика.C
2. D:\SCHOOL\PHYSICS\
3. _hello.exe; 1heliclo.ete; Hhello.exe.....
33₄ = 3×4+3 = 15; 21₇ = 2×7+1 = 15 - верно
33₈ = 3×8+3 = 27; 21₄ = 2×4+1 = 9 - неверно
// PascalABC.NET 3.1, сборка 1219 от 16.04.2016
function IsAutomorph(s:string):boolean;
// Возвращает true, если строка s изображает
// автоморфное число, иначе возвращает false
begin
var b:BigInteger;
if BigInteger.TryParse(s,b) then
Result:=sqr(b).ToString.Right(s.Length)=s
else Result:=false
end;
begin
var s:=ReadlnString('Введите натуральное число:');
if IsAutomorph(s) then Println('Автоморфное')
else Println('Не автоморфное')
end.
<u><em>Тестовые решения:</em></u>
Введите натуральное число: 12890625
Автоморфное
Введите натуральное число: 3245
Не автоморфное