Розв’язання:
Задачу можна розв’язати і без використання літерних величин, але саме такий спосіб, коли при розв’язанні числових задач використовуються операції з літерними величинами, досить часто спрощує процес розв’язку задачі. У цьому ви можете переконатись, коли спробуєте розв’язати деякі з приведених раніше задач. Алгоритм розв’язання даної задачі буде полягати у тому, що ми будемо перетворювати числа і їх квадрати у літерні величини і перевіряти, чи співпадають посимвольно ці величини, якщо рахувати з кінця. Як тільки знайдемо перше неспівпадання, переходимо до розгляду наступного числа з заданого інтервалу. З тим обмеженням, що квадрат розглядуваних чисел не перевищуватиме тип longint, програма, що реалізує описаний алгоритм, може бути такою:
program kolbukw;
uses crt;
var St1, St2: string;
a, b, i, k, k1,k2,kol : longint;
flag : boolean;
begin
write(‘Введiть початок iнтервалу: ’);
readln(a);
write(‘Ведiть кiнець iнтервалу: ’);
readln(b);
kol := 0;
for i := a to b do
begin
Str(i, st1);
k1 := i*i;
Str(k1, st2);
k := length(st1);
k1 := k; { почнемо порiвнювати з кiнця }
flag := true; { припускаємо, що розглядуване число нам пiдходить }
while k > 0 do { поки не порiвняли всi цифри }
begin
if St1[k] <> St2[length(St2) - (k1-k)] then
begin { якщо цифри не однаковi }
flag := false; { то число не пiдходить }
k := 0; { i тому виходимо з циклу }
end;
dec(k); { iнакше порiвнюємо наступнi цифри }
end;
if flag = true then begin
inc(kol);
writeln(st1, ‘ -> ’,st2);
end;
end;
writeln(‘Шуканих чисел у заданому iнтервалi = ’,kol);
readln
end.
Немає коментарів:
Дописати коментар