Отримання знань
дистанційна підтримка освіти школярів
Цикл із передумовою while
Цикл – це послідовність команд, що може виконуватись більше одного разу.
Блок-схема | Алгоритмічна мова | Мова С++ |
![]() |
поки <умова> пц <серія команд> кц |
while (умова) { <серія команд>; } |
Задача Parrot
![]() |
Капосний папуга навчився висмикувати в дідуся Василя волосся, яке ще залишилось у нього на голові. Почавши з однієї волосини, він щодня збільшував порцію вдвічі. Через скільки днів дідусеві не знадобиться гребінець, якщо спочатку в нього було аж N волосин? Приклади вхідних і вихідних даних Введення: 49 Введення: 254 |
Розв’язання
Введемо додаткові змінні:
day – лічильник днів;
p – кількість волосин на голові у дідуся поточного дня;
v – кількість волосин, яку вириватиме папуга.
Спочатку маємо:
day= 0 (папуга ще не почав висмикувати волосся);
p= N (спочатку у дідуся було N волосин);
v= 1 (почав папуга з однієї волосини).
До яких пір триватиме знущання над дідусем? Поки у нього на голові є волосся. Тобто, поки поточна кількість волосин p більша нуля (p>0).
Що трапляється кожного дня?
¤ Папуга вириває у дідуся кількість волосин v.
p= p-v
¤ Кількість волосин v, яку він вириватиме наступного дня, збільшується вдвічі.
v= v*2
¤ Проходить один день, тобто кількість днів day збільшується на один.
day= day+1
Команду day= day+1 можна записувати ще й day++.
Отже, остаточно матимемо алгоритм:
day=0
p=N
v=1
поки p>0
пц
p=p-v
v=v*2
day= day+1
кц
Програма матиме вигляд:
#include <bits/stdc++.h>
using namespace std;
int main(int argc, char** argv)
{
int N, day, p, v;
cin>>N;
day=0;
p=N;
v=1;
while (p>0)
{
p=p-v;
v=v*2;
day++;
}
cout<<day;
return 0;
}
Таблиця виконання алгоритму
Задача Aliquot_3
Незнайці дуже подобається цифра 3. Одного разу він вирішив порахувати у придуманому числі N кількість цифр, кратних 3. Будучи невпевненим у правильності своїх обрахунків, бешкетник почав турбувати жителів Квіткового міста з проханням перевірити його результат. Односельці чомусь не зраділи виявам уваги до своїх осіб з боку Незнайки. Напишіть програму, яка рахуватиме для названого хлопчиком числа N кількість цифр, кратних 3. Приклади вхідних і вихідних даних Введення: 123698 Введення: 1007931 |
![]() |
Розв’язання
Число x називають кратним числу y, якщо x ділиться на y без остачі (тобто дає остачу 0).
У С++, як і в мові Python, операцію, яка знаходить остачу від ділення, позначають %.
Наприклад
15%4 = 3 (15 націло поділити на 4 буде 3; 3*4= 12; остача від 15 буде 3)
24%6= 0 (число 24 націло ділиться на 6, тому остача дорівнює 0).
Як записати умову, що число N кратне 3? При діленні на 3 воно має давати остачу 0. Тобто N%3==0 - перевірка числа на кратність 3.
Для того, щоб порахувати кількість кратних цифр у числі, потрібно вміти число “порізати” на цифри.
Припустимо, що було названо число 238. Як його розділити на цифри 2, 3, 8?
Спробуємо 238 поділити на 10.
Отримаємо цілу частину від ділення – 23 і остачу – цифру 8 (останню цифру в числі).
Продовжимо аналогічні міркування для числа 23 (останню цифру ми знайшли, і далі вона нас не цікавить).
Поділивши число 23 на 10, отримаємо цілу частину 2 і остачу 3 (друга цифра числа).
При діленні 2 на 10 матимемо 0 і остачу 2 (третя цифра).
Від нашого початкового числа 238 залишився 0 (ми його “порізали” на цифри), тому подальші міркування не мають сенсу.
Підведемо підсумки для деякого числа N.
1) До яких пір початкове число потрібно ділити на 10?
Поки воно не перетвориться в нуль (тоді ми знайдемо всі цифри).
Отже, програма має працювати, поки N>0.
2) Як знайти останню цифру числа N?
Потрібно число N поділити на 10 і взяти остачу від ділення.
cifra = N % 10
3) Як відкинути останню цифру і шукати наступні?
Потрібно взяти цілу частину від числа і далі працювати з ним.
N= N/10
Отже, алгоритм поділу числа на цифри матиме вигляд:
поки N>0
пц
cifra = N % 10
N= N/10
кц
Залишилось додати до нашого алгоритму перевірку цифр на кратність 3.
Нехай k – кількість цифр, кратних 3. Початкове значення k= 0 (ми ще не знайшли жодної цифри, що нам підходить).
У циклі після знаходження цифри cifra = N % 10 потрібно перевірити її на кратність 3 та додати 1 до кількості, якщо умова виконується.
k= 0
поки N>0
пц
cifra = N % 10
якщо cifra%3==0
то k= k+1
все
N= N/10
кц
Програма матиме вигляд:
#include <bits/stdc++.h>
using namespace std;
int main(int argc, char** argv)
{
int N, cifra, k;
k=0;
cin>>N;
while (N>0)
{
cifra= N%10;
if (cifra%3==0)
k=k+1;
N= N/10;
}
cout<<k;
return 0;
}