Назад Зміст Вперед

Задачі з вкладеними циклами

Будь-який складний алгоритм завжди складається з декількох простих алгоритмів. Потрібно навчитись їх бачити та комбінувати.

Приклад 1

Знайти 10 перших простих чисел.

В цій задачі використовуються такі алгоритми:

Зрозуміло, що другий алгоритм вкладений у першій.

Змінні:

Вхідних даних немає.

 

Вихідні:

Проміжні:

Алгоритм

  1. Якщо згадати перший алгоритм, то у ньому:
  2. Зрозуміло, що цей алгоритм буде зовнішнім циклом у нашій програмі, і перебір та перевірку чисел потрібно починати з числа 1.
  3. Умова, на яку у цьому циклі перевіряється число n, – чи є це число простим? Алгоритм, який це визначає, буде вкладений в перший.
  4. Згадаємо, що число n називається простим, якщо в нього немає дільників в інтервалі [2, n div 2].
  5. Тепер згадаємо другий алгоритм, який перевіряє, чи просте число n:
  6. Другий алгоритм вкладений у перший перед перевіркою числа n (виділено жирним).

Блок–схема програми

Програма

 Var n,k,i:word; p:boolean;
Begin
 n:=1; k:=0;
 repeat
   n:=n+1;
   p:=false;
   for i:=2 to n div 2 do
      if n mod i=0 then p:=true;

   if not p then
    begin
      write(n,' '); k:=k+1;
    end;
 until k=10;
end.

Результат роботи програми

Відповідь
2 3 5 7 11 13 17 19 23 29

Приклад 2

Дано натуральне число n. Знайдіть його цифровий корінь (від слова цифра, не плутати з коренем квадратним!)

Визначення

Цифровий корінь числа n - це цифра (1, 2, 3,...9), яка обчислюється з цифр числа n за таким алгоритмом:

  1. Знайдемо у числі n суму цифр s.
  2. Перевіримо цю суму s:

Результат роботи програми

Ввід Вивід
3456 9
555 6

Змінні:

Вхідні:

Вихідні:

Проміжні:

Алгоритм

  1. В цій задачі використовуються такі алгоритми:
  2. Зрозуміло, що першій алгоритм вкладений у другий.
  3. Згадаємо алгоритм знаходження суми цифр числа n: обчислюємо останню цифру числа, додаємо її до суми і відкидаємо останню цифру від числа. Все це робимо, поки не переберемо всі цифри числа (у програмі виділено жирним).
  4. У другому алгоритмі:
  5. Значення отриманої суми присвоюється змінній cn та виводиться на екран.

Програма

 var n:longint; c,s,cn:byte;
begin
 read(n);
 repeat
   s:=0;
   repeat
      c:= n mod 10;
      s:=s+c;
      n:=n div 10;
   until n=0;

   n:=s;
 until s<=9;
 cn:=s;
 writeln(cn);
end.

Приклад 3

Знайдіть цифрові корені всіх простих чисел з інтервалу [100, 200]. Надрукувати число та відповідний цифровий корінь.

Результат роботи програми

Відповідь
101 2 103 4 107 8 109 1 113 5 127 1 131 5 137 2 139 4 149 5 151 7 157 4 163 1 167 5 173 2 179 8 181 1 191 2 193 4 197 8 199 1

Змінні:

Вхідних даних немає.

 

Вихідні:

Проміжні:

Алгоритм

  1. В цій задачі використовуються такі алгоритми:
  2. Зрозуміло, що першій алгоритм - це зовнішній цикл for з параметром n. Він перебирає числа в інтервалі [100, 200].
  3. Другий алгоритм - це пошук дільників i для кожного числа n. Це теж цикл for з параметром i (у програмі виділено жирним). Цей цикл вкладений у перший.
  4. Якщо число просте, тобто дільників у числі немає (p=false), то виконується третій алгоритм, обчислення цифрового кореню числа n (у програмі виділено жирним). Цей алгоритм змінює число n, яке є параметром циклу і не може змінюватись, тому робимо копію цього числа у змінній m та застосовуємо цей алгоритм для змінної m.

Програма

 var n,m,i:longint; c,s,cn:byte; p:boolean;
begin
 for n:=100 to 200 do
 begin
   p:=false;
   for i:=2 to n div 2 do
      if n mod i=0 then p:=true;

   if p=false then
      begin
         m:=n;
         repeat
            s:=0;
            repeat
               c:= m mod 10;
               s:=s+c;
               m:=m div 10;
            until m=0;
            m:=s;
         until s<=9;
         cn:=s;
         write(n,' ',cn,' ');

       end;
 end;
end.

Приклад 4

Дано натуральне число n. З’ясуйте, чи є воно симетричним (3434, 345345).

Визначення

Натуральне число n називається симетричним, якщо існує таке натуральне число m, що виконується рівність n div 10m=n mod 10m. Число m дорівнює кількості цифр у числі n, поділеній на 2.

Результат роботи програми

Ввід Вивід
345345 yes
345 no

Змінні:

Вхідні:

Вихідні:

Проміжні:

Алгоритм

  1. У цій задачі використовуються такі алгоритми:
  2. Зрозуміло, що алгоритми використовуються послідовно.
  3. Алгоритм програми докладніше:
  4. Вводимо число n.
  5. Запам’ятовуємо це число у змінну x, бо алгоритм знаходження кількості цифр у числі змінює число n.
  6. Встановимо початкове значення k лічильника цифр у числі.
  7. Використаємо алгоритм знаходження кількості цифр числа x: відкидаємо останню цифру від числа, накопичуючи лічильник k. Все це робимо поки не переберемо всі цифри числа (у програмі виділено жирним).
  8. Знайдемо m:=k div 2.
  9. Знайдемо d=10m (у програмі виділено жирним). Для цього:
  10. Порівняємо частку та остачу від ділення n на d:

Програма

 var n,x,d,i,k,m:longint;
begin
 read(n); x:=n;
 k:=0;
 repeat
    k:=k+1;
    x:=x div 10;
 until x=0;

 m:=k div 2;
 d:=1;
 for i:=1 to m do d:=d*10;

   if n div d=n mod d then
        writeln('симетричне ')
   else writeln('несиметричне ');
end.

Приклад 5

Надрукувати перші 5 шестизначних симетричних чисел.

В цій задачі використовуються такі алгоритми:

Зрозуміло, що другий алгоритм вкладений у першій.

Змінні:

Вхідних даних немає.

Вихідні:

Проміжні:

Алгоритм

  1. Якщо згадати перший алгоритм, то у ньому:
  2. Зрозуміло, що цей алгоритм буде зовнішнім циклом у нашій програмі і перебір та перевірку чисел потрібно починати з числа 100000, бо нам потрібні шестизначні числа.
  3. Умова, на яку у цьому циклі перевіряється число n, це – чи є це число симетричним? Алгоритм, який це визначає буде вкладений в перший.
  4. Тепер згадаємо другий алгоритм, який перевіряє, чи є число n симетричним:
  5. Другий алгоритм вкладений у перший перед перевіркою числа n (виділено жирним).

Програма

 var n,t,k,x,m,d,i:longint;
begin
 n:=100000;t:=0;
 repeat
   n:=n+1;
   k:=0; x:=n;
   repeat
     k:=k+1;
     x:=x div 10;
   until x=0;
   m:=k div 2;
   d:=1;
   for i:=1 to m do d:=d*10;

     if n div d=n mod d then
       begin
         write(n,’ ‘); t:=t+1;
       end;
 until t=5;
end.

Результат роботи програми

Відповідь
100100 101101 102102 103103 104104

Варіанти задач

  1. Надрукувати всі числа з інтервалу [100, 200], цифровий корінь яких кратний 3 (3, 6, 9).
  2. Дано число a. Зайдіть a перших простих чисел.
  3. Дано число a. Знайти просте число, що більше a.
  4. Дано число a. Знайдіть 5 простих чисел, більших a.
  5. Дано число a. Знайти найближче до нього просте число.
  6. Знайдіть всі числа з інтервалу (100, 200), цифровий корінь яких є простим числом (1, 2, 3, 5, 7).
  7. Знайдіть всі числа з інтервалу (100, 200), які кратні своєму цифровому кореню.
  8. Знайдіть цифрові корені чисел Фібоначчі, що належать інтервалу (100, 1000).
  9. Обчисліть та надрукувати цифрові корені досконалих чисел, що належать діапазону (1; 10000). Натуральне число називається досконалим, якщо воно дорівнює сумі своїх дільників, із урахуванням 1 і за винятком самого числа. Наприклад, число 6 - досконале (6=1+2+3).
  10. Знайдіть всі симетричні числа з інтервалу [10000, 1000000].
  11. Знайдіть всі симетричні паліндроми з інтервалу [1000000, 1000000000]. Пояснення: паліндром - це число, яке читається однаково справа наліво та зліва направо, тобто саме число дорівнює перевернутому числу.
  12. Надрукувати з чисел Фібоначчі в інтервалі від 1 до 100, тільки прості числа, а також їх порядкові номери в ряду Фібоначчі.
  13. Для всіх чисел, що належать діапазону [100; 120] обчислити та надрукувати ті дільники, що є членами послідовності Фібоначчі.
  14. Надрукувати всі чотирьохзначні симетричні числа та знайдіти їх кількість.
  15. Знайдіть цифрові корені всіх симетричних чисел, що належать інтервалу (10000, 100000).
  16. Надрукувати перші 10 п’ятизначних паліндромів, що є простими числами. Пояснення: паліндром - це число, яке читається однаково справа наліво та зліва направо, тобто саме число дорівнює перевернутому числу.

Назад Зміст Вперед