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

> числа, дающие в сумме заданное число
Unknown
сообщение 28.05.2009 21:50
Сообщение #1


Пионер
**

Группа: Пользователи
Сообщений: 104
Пол: Мужской
Реальное имя: Евгений

Репутация: -  0  +


Необходимо найти все такие n1, ..., n10, что n1 + ... + n10 = 100.
Можно перебирать вообще все возможные комбинации n1, ..., n10 и проверять на равенство 100, но наверняка есть способ решить задачу быстрее, только какой?
Если есть готовый код (на любом, наверное, языке) - с удовольствием гляну smile.gif


--------------------
go ask Alice
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
sheka
сообщение 29.05.2009 1:59
Сообщение #2


Я.
****

Группа: Пользователи
Сообщений: 809
Пол: Мужской
Реальное имя: Саша

Репутация: -  11  +


program summ;

uses crt;

const
n=10; //сумма
k=3; //количество слогаемых

type
mas=array [1..k]of integer;

var
i:integer;
m:mas;
c:char;
a:integer;

procedure razn(var a:integer;var m:mas);
var mm:integer;
begin
mm:=n-(a-1);
for i:=k downto a+1 do mm:=mm-m[i];
if mm<=m[a+1] then m[a]:=mm
else begin m[a]:=m[a+1]; a:=a-1; razn(a,m);end; //<=ошибка вот здесь, из-за рекурсии.
end;

procedure rec;
var s:integer;
begin
a:=0;
repeat inc(a);
until (a=k)or(m[a]+1<m[a+1]);
if a=k then begin
a:=0;
repeat inc(a);
until (a>k-1)or(m[a]+1=m[a+1]);
if (m[a]+1=m[a+1]) then begin
s:=n-(a-1);
for i:=1 to a-1 do m[i]:=1;
for i:=a+1 to k do s:=s-m[i];
while (s>1) do
if m[a]<m[a+1] then begin inc(m[a]); dec(s); end
else dec(a);
end;
end;

{if a=k then halt;} {kogda budet pravilno rabotat}
writeln('a=',a);for i:=1 to k do write(m[i]:3);writeln; c:=readkey; if c=#27 then halt;

dec(m[a+1]);
razn(a,m);
for i:=1 to a-1 do m[i]:=1;
rec;
end;

begin
clrscr;
for i:=1 to k-1 do m[i]:=1;
m[k]:=n-k+1;
for i:=1 to k do write(m[i]:3);writeln;writeln('a=',a); c:=readkey; if c=#27 then halt;
rec;

end.



посмотрите пожалуйста, {умираю хочу спать wacko.gif }.
уверен на 98,8% что все остальное правильно.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме


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

 



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