У заданому діапазоні натуральних чисел підрахувати кількість таких чисел, у запису яких останні цифри квадратів чисел співпадають з самим числом (6 і 36, 25 і 125).

Розв’язання: 

Задачу можна розв’язати і без використання літерних величин, але саме такий спосіб, коли при розв’язанні числових задач використовуються операції з літерними величинами, досить часто спрощує процес розв’язку задачі. У цьому ви можете переконатись, коли спробуєте розв’язати деякі з приведених раніше задач. Алгоритм розв’язання даної задачі буде полягати у тому, що ми будемо перетворювати числа і їх квадрати у літерні величини і перевіряти, чи співпадають посимвольно ці величини, якщо рахувати з кінця. Як тільки знайдемо перше неспівпадання, переходимо до розгляду наступного числа з заданого інтервалу. З тим обмеженням, що квадрат розглядуваних чисел не перевищуватиме тип 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.

Немає коментарів:

Дописати коментар