Это пример задачи, имеющей большой воспитательный потенциал. На её примере можно показать, как математики решение следующей задачи умеют сводить к уже решённой.
Сначала решим задачу для двух колец. Очевидно, что пирамиду из двух колец можно перенести за три хода.
Чтобы перенести пирамиду из трёх колец, сначала перенесём на свободный штырёк пирамиду из двух колец. Для этого требуется 3 хода. Перенесём нижнее кольцо на свободный штырёк. Наконец, опять за три хода перенесем пирамиду из двух колец на тот штырёк, где уже находится большее кольцо. Пирамиду из трёх колец можно перенести за 3 + 1 + 3 = 7 ходов.
а) Рассуждая аналогично, пирамиду из четырёх колец перенесём за 7 + 1
+ 7 = 15 ходов.
б) Пирамиду из пяти колец перенесём за 15 + 1 + 15 = 31 ход.
Возможно, так, как сделал я - не совсем то, что хотел от вас преподаватель. Но программа работает как надо по вашему заданию. При чем вводить можно даже числа из девяти знаков
function checkstr( x: string ): boolean; // это функция, которая проверяет введенное пользователем на то, является ли это целым положительным числом, а не какими-нибудь буквами begin var k: integer; if length(x) > 0 then begin Result := True; for k := 1 to length(x) do if not (x[k] in ['0'..'9']) then begin Result := False; // если пользователь ничего не ввел или ввел не цифры, то будет возвращена ложь end;end;end;
var N: string; error, r, i, min: integer; B: array[1..8] of integer; // В - массив, в котором будут храниться все цифры введенного числа begin write('Введите целое положительное число: '); readln(N); if checkstr(N) then begin // вызываем нашу функцию на обработку введенных данных r := Length(N); // присваиваем переменной r размер введенной строки val( N[ 1 ], min, error); // конвертирует строковое значение в тип integer и присваиваем минимальному значению первую цифру for i := 2 to r do begin val( N[ i ], B[ i ], error ); // конвертируем строковые цифры в integer if ( B[i] < min ) AND ( B[i] mod 2 <> 0) then min := B[i]; // если цифра нечетная и меньше переменной min , то присвоить переменной min значение этой цифры if ( min mod 2 = 0 ) then min := B[i]; // проверяем на всякий случай еще раз первую цифру end; if ( min mod 2 = 0 ) then writeln('Нечетных цифр нет') // если нечетных цифр нет, а наименьшая цифра четная, то говорим, что нечетных цифр нет else writeln( 'Наименьшая нечетная цифра в числе: ', min ); // выводим наименьшую нечетную цифру из числа end else writeln('Неверный формат ввода'); // если пользователь вдруг ввел буквы или какие-нибудь каракули вместо целого числа end.
Сначала решим задачу для двух колец. Очевидно, что пирамиду из двух колец можно перенести за три хода.
Чтобы перенести пирамиду из трёх колец, сначала перенесём на свободный штырёк пирамиду из двух колец. Для этого требуется 3 хода. Перенесём нижнее кольцо на свободный штырёк. Наконец, опять за три хода перенесем пирамиду из двух колец на тот штырёк, где уже находится большее кольцо. Пирамиду из трёх колец можно перенести за 3 + 1 + 3 = 7 ходов.
а) Рассуждая аналогично, пирамиду из четырёх колец перенесём за 7 + 1
+ 7 = 15 ходов.
б) Пирамиду из пяти колец перенесём за 15 + 1 + 15 = 31 ход.
function checkstr( x: string ): boolean; // это функция, которая проверяет введенное пользователем на то, является ли это целым положительным числом, а не какими-нибудь буквами
begin
var k: integer;
if length(x) > 0 then begin
Result := True;
for k := 1 to length(x) do
if not (x[k] in ['0'..'9']) then begin
Result := False; // если пользователь ничего не ввел или ввел не цифры, то будет возвращена ложь
end;end;end;
var N: string;
error, r, i, min: integer;
B: array[1..8] of integer; // В - массив, в котором будут храниться все цифры введенного числа
begin
write('Введите целое положительное число: ');
readln(N);
if checkstr(N) then begin // вызываем нашу функцию на обработку введенных данных
r := Length(N); // присваиваем переменной r размер введенной строки
val( N[ 1 ], min, error); // конвертирует строковое значение в тип integer и присваиваем минимальному значению первую цифру
for i := 2 to r do begin
val( N[ i ], B[ i ], error ); // конвертируем строковые цифры в integer
if ( B[i] < min ) AND ( B[i] mod 2 <> 0) then min := B[i]; // если цифра нечетная и меньше переменной min , то присвоить переменной min значение этой цифры
if ( min mod 2 = 0 ) then min := B[i]; // проверяем на всякий случай еще раз первую цифру
end;
if ( min mod 2 = 0 ) then writeln('Нечетных цифр нет') // если нечетных цифр нет, а наименьшая цифра четная, то говорим, что нечетных цифр нет
else writeln( 'Наименьшая нечетная цифра в числе: ', min ); // выводим наименьшую нечетную цифру из числа
end
else writeln('Неверный формат ввода'); // если пользователь вдруг ввел буквы или какие-нибудь каракули вместо целого числа
end.