Другие языки программирования и технологии

В паскале нужно разбить целое число на три слогаемых, всевозможными способами.

В паскале нужно разбить целое число на три слогаемых, всевозможными способами.При этом, так что бы они не повторялись (1+2+1 - это тоже самое что 2+1+1). Хотелось бы увидеть листинг) Заранее благодарен
А какое число разбивать то?
Для 10 у меня получилось вот так:
Введите N = 10
Все комбинации слогаемых:
1+1+8
1+2+7
1+3+6
1+4+5
2+2+6
2+3+5
2+4+4
3+3+4
Вот "листинг" :
const SlogSize = 3;
var SlogNums : array [1..SlogSize] of Longint;

procedure OutSlog;
var Slog : Byte;
begin
Slog := 1; Write(SlogNums[Slog]);
while Slog < SlogSize do
begin
Inc(Slog);
Write('+', SlogNums[Slog]);
end;
WriteLn;
end;

function MaxSlog : Boolean;
var Slog : Byte;
begin
for Slog := 1 to SlogSize - 1 do
if SlogNums[Slog] > SlogNums[SlogSize] then
begin
MaxSlog := False;
Exit;
end;
MaxSlog := True;
end;

procedure ToSlog(N, First : Longint; Slog : Byte);
begin
Inc(Slog);
if Slog = SlogSize then begin
SlogNums[Slog] := N;
if MaxSlog then
OutSlog;
end
else begin
...Тут я (добрый дяденька) кое что скрыл! Всего 5 строчек.. . ;-)
end;
end;

var
N : Longint;

begin
Write('Введите N = '); ReadLn(N); N := Abs(N);
if N < SlogSize then WriteLn('Не возможно разбить на все не нулевые слогаемые. ')
else begin WriteLn('Все комбинации слогаемых: '); ToSlog(N, 1, 0); end;
end.
Программа получилась универсальная:
Меняешь константу и считает для другого количества слогаемых!
Вот к примеру 10 разбить на 4 слогаемых:
Все комбинации слогаемых:
1+1+1+7
1+1+2+6
1+1+3+5
1+1+4+4
1+2+2+5
1+2+3+4
1+3+3+3
2+2+2+4
2+2+3+3
Лев Ханин
Лев Ханин
68 479
Лучший ответ
могу сказать что там есть только вложенные циклы.. . а сам листинг мне писать влом
Для того чтобы увидеть листинг нужно его сначала написать. Ну или заплатить денег. Если хочешь пиши - сделаю тебе листинг)
Igrok ***
Igrok ***
7 640
можно обойтись и без циклов, используй операторы диф и мод
листинг
var
i:word;
begin
readln(i);
writeln((i mod 10),'+',(i div 10)mod 10,'+',(i div 100),'=',
(i mod 10)+(i div 10)mod 10+(i div 100));
readln;
end.

Похожие вопросы