Другие языки программирования и технологии

Решите пожалуйста задачу в Паскале) Нестандартная)

512 рыцарей собрались на турнир,
Чтоб самого достойного узнал волшебный мир,

Они сразились по двое и до исхода дня

Из каждой пары рыцарей один упал с коня.

И если будут рыцари все так же продолжать,

То сколько дней осталось им друг с другом воевать?
var Days, Knights : Integer;
begin
Days := 0; Knights := 512;
while Knights > 1 do begin Knights := Knights shr 1; Inc(Days); end;
WriteLn('Days = ', Days);
end.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Это очень „стандартная“ программа начального уровня, в которой затрагиваются следующие темы:

— циклы

— системы счисления
ГЛ
Гера Лян
53 096
Лучший ответ
log2(512)=9
Собссно, вся задача. Непонятно, что тут нестандартного и зачем тут вообще нужен паскаль.
У Женьки последний рыцарь сражается сам с собой.

>Дайте ответ пожалуйста в виде кода программы

Офигеть. . .Ладно, изобретем:

writeln(Round(ln(512)/ln(2)));
Программа стандартная, просто "оформление" вопроса пудрит "моск".
И сводится - в какую степень надо возвести 2, чтобы получить 512.
(учитывая что чел должен остаться один, но при этом считать надо сразу с половины от числа) .

А ответ 9. Т. к. в первом-же дне погибла половина (неправильно считать с 512 способом, которым считал Женёк)

Программа:

begin
WriteLn(ln(512)/ln(2));
end.

Вычисляем логаримф по основанию 2
Можно и циклом, но так прикольнее.
Можно и просто WriteLn('9');, но Вашему преподу точно такое не понравится =) А так - вполне законные и корректные вычисления.
Alexander B
Alexander B
84 764
Бросай паскаль, учи java :D

public static void main(String[] args) {
int knights = 512;
int days;
for (days = 0; knights != 1; days++) {
knights = knights / 2;
}
System.out.println("Спустя " + days + " дней остался только один рыцарь. ");
}
Каждый день погибает половина рыцарей. Давай считать (думаю, что 9): 512-256-128-64-32-16-8-4-2-1. Ошибся - 10 дней.