Часть 1. Вариант 12
.docВариант № 12
1). Задание
Построить таблицу всех разбиений целого числа на сумму трех положительных слагаемых. Повторяющиеся разбиения выводить один раз.
2). Схема алгоритма.
На рис. 1 приведена схема алгоритма методом Насси-Шнейдермана.
program ToBreakNumber;
Uses crt;
Var Number,K:byte; { Number – введенное значение числа, К – максимально возможное значение любого слагаемого}
i,m:byte; {Переменные-счетчики}
a,b,c:byte; {Три положительных слагаемых}
Begin
clrscr; {Очистка Output файла}
write(' Enter number = ');
readln(Number);
K:= Number - 2; {Максимальное значение слагаемого}
i:=1; {Начальное значение переменной}
while i <= K do {Цикл на возможные значения первого слагаемого}
begin
a:=i; {Установка значения переменной (первое слагаемое)}
{Установка/сброс значений второго и третьего слагаемых}
b:=1;
c:=1;
m:=1; {Установка начального значения счетчика}
i:=i+1; {Увеличение переменной-счетчика}
while m <= K do {Цикл на значения второго слагаемого}
begin
b:=m; {Установка значения второго слагаемого}
m:=m+1; {Увеличение переменной-счетчика}
c:=Number-(a+b); {Расчет третьего слагаемого}
{Проверка соответствия суммы трех слагаемых значению переменной, хранимой введенное значение, при положительном значении третьего рассчитываемого слагаемого}
if ((a+b+c)=Number) and (c>0) then
begin
writeln;
{Вывод результатов (трех слагаемых)}
write(a);write('|');write(b);write('|');write(c);
end;
end;
end;
end.
Тестовые наборы для отладки программы.
Тест 1.
Введенное значение:3
Результат:
1|1|1
Тест 2.
Введенное значение:5
Результат:
1|1|3
1|2|2
1|3|1
2|1|2
2|2|1
3|1|1
Тест 3.
Введенное значение:7
Результат:
1|1|5
1|2|4
1|3|3
1|4|2
1|5|1
2|1|4
2|2|3
2|3|2
2|4|1
3|1|3
3|2|2
3|3|1
4|1|2
4|2|1
5|1|1
Рис. 1. Схема алгоритма, представленная методом Нэсси-Шнейдермана