Добро пожаловать, гость
:: алгоритмы  и методы :: :: олимпиадные задачи :: :: связь :: :: о сайте :: :: форум ::

Форум работает в режиме архива, только для чтения и поиска.
Архив 2004 Архив 2007 Архив 2013

 
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 26.11.2010, 14:38
Новичок

Отправить личное сообщение для konstantin Посмотреть профиль Найти все сообщения от konstantin
 
Регистрация: 08.06.2009
Сообщений: 14

Перемена мест слагаемых
Дана задача

Раздепить целочисленный отрезок на целочисленные отрезки.
Например: отрезок длиной 4 можно представить как
1+1+1+1
1+1+2
1+2+1
2+1+1
2+2
1+3
3+1
4
Всего 8 вариантов.
Написать программу на Паскале, генерирующую такие упорядоченные разложения на слагаемые в виде строк в выходном файле.
Я пытался решить эту задачу редактируя следующую программу

uses crt;
procedure ViewSumms(N : Integer);
var List : array [byte] of byte;
CountVariants : longint;

procedure _ViewSumms(k, Count, max : longint);
var S : String;
i : Integer;
f : text;
begin
Assign(f, 'c11.txt'); ReWrite(f);
for i := 0 to Count - 1 do begin
Write(f, List[i] : 3);
if i < Count -1 then Write(f, ' ') else WriteLn;
end;
inc(CountVariants);

while (List[k] < max) and (k < (Count-1)) do begin
dec(Count); inc(List[k]);
_ViewSumms(k + 1, Count, List[k]);
end;
Close(f);
end;

begin
if (N < 1) or (N > 255) then exit;
FillChar(List, sizeOf(List), 1);
CountVariants := 0;
_ViewSumms(0, N, N);
WriteLn('Bcego BapuaHToB: ', CountVariants);
end;

var N : Integer;
f : text;
s : string;
begin
ClrScr;
Write(' N = ');ReadLn(N);
ViewSumms(N);
ReadLn;
end.

Но у меня ничего не получается.
Помогите, пожалуйста
  #2  
Старый 26.11.2010, 15:06
MBo MBo вне форума
Местный

Отправить личное сообщение для MBo Посмотреть профиль Найти все сообщения от MBo
 
Регистрация: 21.09.2006
Адрес: Новосибирск
Сообщений: 1,374

Код:
procedure CompositionRec(Sum: Integer; s: string);
var
  i: Integer;
  ss: string;
begin
  if Sum = 0 then
    Writeln(s)
  else
    for i := 1 to Sum do begin
      Str(i, ss);
      CompositionRec(Sum - i, s + ss + ' ');
    end;
end;

begin  
  CompositionRec(4, '');
end.
  #3  
Старый 26.11.2010, 17:01
гость

 
Сообщений: n/a

у Шенья в книге все есть.
 


Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра