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


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


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

if s[j]<>s[k+l-j] then palindrom:=false; end; begin

write('Введите целое число: ');

readln(М);

writeln('Это - ',noyes[palindrom(М)],' палиндром');

readln;

end.

Задание 2.18. Генерация палиндромов с заданным свойством

Составить программу, выводящую на экран все четырехзначные палиндромы, квадраты которых тоже являются палиндромами. Задачу можно несколько усложнить, если считать количество цифр в исходном палиндроме параметром k (k < 5).

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

Вместо перебора всех чисел в диапазоне [1000, 9999] целесообразно организовать цикл по формированию четырехзначных палиндромов вида a1a2a2a1, который будет повторяться всего 90 раз.

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

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

DECLARE FUNCTION palindrom!(N&)

CLS

FOR Al=l TO 9: FOR A2=0 TO 9

M&=(((A1*10)+A2)*10+A2)*10+A1

M2&=M&*M&

IF palindrom(M2&) THEN PRINT M&,M2& NEXT A2, A1 END

FUNCTION palindrom (N&)

REM Если N - палиндром, то palindrom = 1

palindrom=l

IF N&<10 THEN EXIT FUNCTION : ' Одноразрядное - всегда палиндром

s$=STR$(N&) : ' перевод числа в символьную строку

k%=LEN(s$)

FOR j=2 TO l+k%/2 : ' Цикл проверки симметрии цифр

IF MID$ (s$, j,l)OMID$(s$,k%+2-j,l) THEN palindrom=0 NEXT j

END FUNCTION

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

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

#include <stdio.h>

#include <conio.h>

int palindrom (long N);

ma in ()

{

long M,M2;

int al,a2;

for(al=l; al<10; al++)

for(a2=0; a2<10; a2++)

{

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

M2=M*M;

if(palindrom(M2))

printf ("\пчисло=%1d квадрат=%1d",М,М2) ; }

getch();

int palindromflong N)

{/* Если N - палиндром, то palindrom = 1 */

int j,k=l;

char digit[10];

if(N<10) return 1; /* Одноразрядное - всегда палиндром */

for(j=0; j<10; j++) /* Цикл выделения цифр числа N */

{

digit[j]=N % 10; N=N/10;




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