22 листопада 2009 р.

Цикли (підготовка до олімпіади)

Задача 1. Скласти алгоритм, що підраховує кількість двоцифрових цілих чисел з сумою цифр, яка дорівнює S. (Цифра старшого розряду не повинна дорівнювати 0).
Розв'язання.
(найпростіший варіант - два вкладених цикли)
...
k:=0;
for i:=1 to 9 do
begin
for j:=0 to 9 do
if i+j=s then k:=k+1;
end;
...
(другий варіант - з одним циклом)
...
k:=0;
for i:=1 to 9 do
begin
j:=s-i           {Обчислюємо можливе значення другої цифри}
if (j>=0) and (j<=9)
then k:=k+1;
end;
...
Ще швидший алгоритм розв'язання задачі можна отримати після аналітичного дослідження розв'язків:
Сумма цифр        Варіанти чисел                             Кількість варіантів
0                                 -                                                                               0
1                                10                                                                              1
2                                11, 20                                                                        2
3                                12, 21, 30                                                                  3
4                                13, 22, 31, 40                                                            4
...                                ...                                                                              ...
9                                18, 27, 36, 45, 54, 63, 72, 81, 90                              9
10                              19, 28, 37, 46, 55, 64, 73, 82, 91                              9
11                              29, 38, 47, 56, 65, 74, 83, 92                                    8
12                              39, 48, 57, 66, 75, 84, 93                                          7
...                                ...                                                                            ...
17                              89, 98                                                                       2
18                              99                                                                             1
19                              -                                                                               0

Закономірність, виявлену під час аналізу задачі, можна подати алгоритмом:
...
if s<1 then k:=0 else
if s<10 then k:=s else
if s<19 then k:=19-s else k:=0;
...

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

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