Як вирішувати подібні завдання з ІВТ (Паскаль, підготовка до ЄДІ) (див.
завдання. нижче записаний алгоритм. Отримавши на вхід число х, цей алгоритм друкує два числа: a та b. вкажіть найменше з таких чисел x, під час введення яких алгоритм друкує спочатку 13, а потім 5.
var x, a, b, c:integer;
завдання. є алгоритм. отримавши на вхід число х, він друкує два числа a та b. Необхідно вказати найбільше з чисел х, під час введення якого алгоритм надрукує спочатку 2, та був 26.
var x, a, b:integer;
якщо є інформація для тупих, як вирішити такі завдання, будь ласка, дайте посилання.
Дані завдання відносяться до завдань ЄДІ з інформатики, суть яких - аналіз коду програми, що містить цикли та розгалуження. Від вирішального завдання потрібно проаналізувати хід виконання програми, при цьому необхідно знати особливості виконання циклів, а як і суть роботи операторів div і mod.
Оператор div виконує цілий поділ (без залишку), наприклад, значенням виразу 56 div 10 буде 5. Інший приклад: 5 div 10 дає 0, оскільки ділене менше дільника.
Оператор mod видає залишок від цілого поділу, наприклад, значенням виразу 56 mod 10 буде 6. Інший приклад: 5 mod 10 дорівнює 5.
Тепер розглянемо перший із запропонованих алгоритмів.
- Цикл while виконується доти, доки число x залишається великим 10. Наприкінці кожного етапу виконання циклу число х націло ділиться на 10, тобто від нього відсікається остання цифра. Таким чином, якщо x - однозначне число, більше нуля, то цикл виконається одноразово, якщо x - двозначне - двократно і т.д. Таким чином, цикл призначений для перебору цифр у числі x.
- Змінна c є допоміжною, і на кожному кроці виконання циклу єостанню цифру числа x, значення якого змінюється циклі (див. пункт 1).
- Змінна a призначена для підсумовування всіх цифр числа x: перед початком циклу вона обнулена, кожному етапі виконання циклу до її значення додається остання цифра числа x.
- Змінна b призначена для збереження значення найменшої цифри в числі x: перед початком циклу їй надано значення 10, далі, якщо поточне значення змінної c менше b, то b надається значення c.
Отже, потрібно, щоб на виході ми як значення a отримали б 13, а значення b - 5 при найменшому можливому x. У такому разі нам відомо, що число x – двозначне, одна з його цифр – 5, а сума цифр числа дорівнює 13. Очевидно, що цій умові задовольняє число 85: друга цифра числа – це 8, а 85 більше 58.
Тепер розглянемо другий код.
- Цикл виконується доти, доки число x залишається більшим 100. Після виконання чергового кроку циклу число x націло ділиться на 100.
- Змінна a, обнулена спочатку, зберігає кількість виконаних кроків циклу, тобто знаємо, що цикл повинен виконатися двічі. Тобто, число x є чотиризначним, оскільки ми шукаємо найбільше число.
- Змінна b, обнулена спочатку, зберігає суму залишків від цілісного поділу b на 100. Така операція відсікає від цисла дві останні цифри.
Що це означає? Припустимо, було введено число 1234. На першому етапі циклу отримаємо:
b = 0 + (1234 mod 100) = 34. Тобто b – це число – останні дві цифри числа x.
На другому кроці виконання циклу число x дорівнюватиме 12 (1234 div 100=12). b = 45 + (12 mod 100) = 34 +12 = 46. Тобто на другому кроці виконання циклу ми до попереднього значення додаємо число - перші дві цифри числа x, та отриманасума виводиться на друк.
Отже, ми знаємо, що x - чотиризначне число, сума двох чисел - перших двох та останніх двох цифр якого повинна дорівнювати 26). Треба розбити число 26 на відповідні доданки так, щоб одне з них було максимально можливим. Отримуємо: 26 = 26 +0
Найбільшою кількістю буде 2600.
Підбірка посилань щодо вирішення таких завдань :
Безліч розібраних прикладів схожих завдань можна знайти тут і тут.