Для решения этой задачи нужно воспользоваться рекурсией:
procedure FindSum(Num, Ost : Byte; S : String);
var Sn : String; N : Byte;
begin
if Ost = 0 then begin Delete(S, 1, 1); if Pos('+', S) > 0 then WriteLn(Num, ' = ', S); end
else for N := 1 to Ost do begin
Str(N, Sn); FindSum(Num, Ost-N, S+'+'+Sn);
end;
end;
…
Write('N = '); ReadLn(N);
FindSum(N, N, '');
К примеру:
N = 5
5 = 1+1+1+1+1
5 = 1+1+1+2
5 = 1+1+2+1
5 = 1+1+3
5 = 1+2+1+1
5 = 1+2+2
5 = 1+3+1
5 = 1+4
5 = 2+1+1+1
5 = 2+1+2
5 = 2+2+1
5 = 2+3
5 = 3+1+1
5 = 3+2
5 = 4+1
Чтобы не получать значения с перестановкой слагаемых, нужно чуть-чуть доработать…
N = 5
5 = 1+1+1+1+1
5 = 1+1+1+2
5 = 1+1+3
5 = 1+2+2
5 = 1+4
5 = 2+3
… И нужно не забыть, что в переменную String влазит всего 255 символов, т. е. таким способом сумму можно получить только до значения 127 !
Другие языки программирования и технологии
задача pascal. представить число в виде всех возможных сумм.
Два цикла и условный оператор? Куда ж их запихать-то? Достаточно одного цикла и совсем не нужен if:
var
n,idx:integer;
begin
write('n=');
readln(n);
for idx:=0 to n do
writeln(n,'=',n-idx,'+',idx);
readln;
end.
var
n,idx:integer;
begin
write('n=');
readln(n);
for idx:=0 to n do
writeln(n,'=',n-idx,'+',idx);
readln;
end.
А сложность в чем? Два цикла for и условный оператор if решат вашу задачу в пару секунд.
Похожие вопросы
- как решить через abc pascal задачу "Дано натуральное число n. Получить все простые делители этого числа"
- Задача Pascal. СРОЧНО!
- Помогите с задачей pascal пожалуйста. одна осталась до зачёта!
- Пожалуйста помогите решить задачу Pascal
- Разделить массив с числами на несколько массивов, чтобы сумма чисел в массивах была равна.
- Задача Pascal , строки , помогите пожалуйста !!!
- Помогите решить задачи Pascal
- Какой язык программирования сможет решить задачу? (Pascal не смог)
- Pascal. 16ричное число превести в 2ичное
- нужна полная прога на си для задачи. найти натуральное число от1 до 10000 с максимальной суммой делителеи.