Практика программирования (Бейсик, Си, Паскаль)


Задачи,советы и ответы - часть 32


if(N!=0) k++;

}

for(j=0; j <= k/2; j++) /* Цикл проверки симметрии цифр */

if(digit[j]!=digit[k-j-1])

return 0;

return 1; }

Программа 2_18.pas

program sqr_pal;

{ Генерация палиндромов, квадраты которых тоже палиндромы }

var

M,M2:longint;

al,a2:integer;

function palindrom(N:longint):boolean; { Если N - палиндром, то palindrom = true }

var

j,k:integer;

digit:array [0..9] of byte; begin k:=l;

palindrom:=true;

if N < 10 then exit; { Одноразрядное - всегда палиндром } for j : =0 to 9 do { Цикл выделения цифр числа^ N }

begin

digit[j]:=N mod 10; N:=N div 10;

if N00 then inc(k);

end;

for j:=0 to k div 2 do { Цикл проверки симметрии цифр }

if digit[j]odigit[k-j-1] then palindrom:=false; end;

begin

for al:=l to 9 do

for a2:=0 to 9 do begin

M:=(((al*10)+a2)*10+a2)*10+al;

M2:=M*M;

if palindrom(M2) then

writeln('число=',M,' квадрат=',М2);

end;

readln; end.

Задание 2.19. Числовые преобразования до обнаружения зацикливания

Составить программу, которая вводит длинное целое число N и подвергает его многократному преобразованию по следующей схеме:

N1+i = a(i,k)3+ a(i,k-l)3+ ... + a(i,0}3

Здесь через a (i,k), a(i,k-i),... , a(i,0) обозначены цифры числа NL Обработка прекращается при обнаружении зацикливания (N! = N-J, i > j).

Совет 1 (общий)

Очень большое девятиразрядное число 1999999999 дает максимальную сумму кубов цифр, равную 6562. Поэтому один из возможных вариантов решения — завести массив Q из 6562 элементов, предварительно обнулив все его элементы. Затем в процессе преобразования текущего числа NI записывать в элемент Q [Ni] индекс i, если значение этого элемента было равно 0. Цикл будет обнаружен, как только получится число Nj, для которого в элемент Q[NJ] уже что-то заносилось. В связи с тем, что в используемых системах программирования глобальные числовые массивы перед запуском программы чистятся, можно отказаться от обнуления элементов массива Q.

Совет 2 (QBasic)

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




- Начало -  - Назад -  - Вперед -