Помощь - Поиск - Пользователи - Календарь
Полная версия: Комбинаторика
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Славик
Есть два числа n, m. Нужно посчитать количество сум которые удоволетворяют условиям:
1) количество слагаемых не больше m
2) каждое из слагаемых не больше n, причем ноль считается за слагаемое, и слагаемые могут повторяться
3) например суммы 1+3+5 и 1+5+3 считаются идентичными
Я написал программу, но не уверен в том что она рабатает верно

Код

var
f,f1:text;
n,m:integer;
sum:integer;
procedure ff(j,lev:integer);
var
i:integer;
begin
if lev<=m then
begin
for i:=j to n do
begin
  inc(sum);
  ff(i,lev+1);
end;
end;
end;
begin
assign(f,'sums.in');
assign(f1,'sums.out');
reset(f);
rewrite(f1);
readln(f,n,m);
sum:=0;
ff(0,1);
writeln(f1,sum);
close(f);
close(f1);
end.


Может ли кто-нибудь проверит эту прогу?
volvo
У тебя не совсем правильно считалось количество комбинаций... Если я не ошибаюсь - то вот так должно быть (я добавил и вывод самих комбинаций тоже):
var
  n,m:integer;
  sum:integer;

procedure ff(s: string; j, lev:integer);
var
  i: integer;

begin
  if lev <= m then begin
    writeln(s);
    inc(sum);
    for i:=j to n do
      ff(s+'+'+chr(ord('0') + i), i, lev+1);
  end;
end;

begin
  n := 2; m := 4;
  sum:=0;
  ff('', 0,0);
  writeln(sum);
end.


P.S. klem4, в той задаче нельзя было использовать одинаковые слагаемые, насколько я помню - а это меняет решение...
Славик
Цитата(volvo @ 16.02.2006 21:06) *

У тебя не совсем правильно считалось количество комбинаций... Если я не ошибаюсь - то вот так должно быть ....

Большое спасибо!
P.S. на самом деле мое решение просто не учитывает решение вида 0+0+...+0.
Славик
Volvo, сегодня решил подумать над прогой еще чуть-чуть, и понял что правильно все-таки работает мой вариант, у тебя на примере m=2, n=2 выводиться ответ 10 вариантов, а самих вариантов выводиться 9
volvo
А первый - пустая строка? Забыл?

Надо просто НЕ учитывать ее, и
  writeln(sum - 1); { Делать вот так }
Славик
Да я просто к тому, что моя первая прога вроде работает верно!
volvo
Вот именно, что "вроде"... Ты же не видишь, КАКИЕ комбинации она подсчитывает... Вот если бы видел - тогда можно было сравнивать...
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.