IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

 
 Ответить  Открыть новую тему 
> Комбинаторика
Славик
сообщение 16.02.2006 20:46
Сообщение #1


Гость






Есть два числа 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
сообщение 16.02.2006 21:06
Сообщение #2


Гость






У тебя не совсем правильно считалось количество комбинаций... Если я не ошибаюсь - то вот так должно быть (я добавил и вывод самих комбинаций тоже):
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, в той задаче нельзя было использовать одинаковые слагаемые, насколько я помню - а это меняет решение...
 К началу страницы 
+ Ответить 
Славик
сообщение 16.02.2006 21:36
Сообщение #3


Гость






Цитата(volvo @ 16.02.2006 21:06) *

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

Большое спасибо!
P.S. на самом деле мое решение просто не учитывает решение вида 0+0+...+0.
 К началу страницы 
+ Ответить 
Славик
сообщение 17.02.2006 20:22
Сообщение #4


Гость






Volvo, сегодня решил подумать над прогой еще чуть-чуть, и понял что правильно все-таки работает мой вариант, у тебя на примере m=2, n=2 выводиться ответ 10 вариантов, а самих вариантов выводиться 9
 К началу страницы 
+ Ответить 
volvo
сообщение 17.02.2006 20:27
Сообщение #5


Гость






А первый - пустая строка? Забыл?

Надо просто НЕ учитывать ее, и
  writeln(sum - 1); { Делать вот так }
 К началу страницы 
+ Ответить 
Славик
сообщение 17.02.2006 20:41
Сообщение #6


Гость






Да я просто к тому, что моя первая прога вроде работает верно!
 К началу страницы 
+ Ответить 
volvo
сообщение 17.02.2006 20:45
Сообщение #7


Гость






Вот именно, что "вроде"... Ты же не видишь, КАКИЕ комбинации она подсчитывает... Вот если бы видел - тогда можно было сравнивать...
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 20.06.2025 9:53
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"