Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Задачи _ сумма выбранных чисел делилась на N

Автор: Tima 14.10.2006 16:36

имеется n чисел, написать программу, так чтобы сумма выбранных чисел делилась на n.
например n=6, а выбирать нужно по 2 числа, так чтобы сумма этих двух была равна 6, выдать все возможные комбинации...помогите плз.

Автор: volvo 14.10.2006 17:38

Цитата
так чтобы сумма этих двух была равна 6
Ты уж реши для себя, равна или все-таки кратна... А то в первой части задания ты говоришь одно, а во второй - другое...

Здесь:
http://forum.pascal.net.ru/index.php?s=&showtopic=3777&view=findpost&p=52823
есть программа генерации всех сочетаний (сделай из 6 по 2), и проверяй, соответствуют ли элементы массива с найденными индексами заданному условию...

Автор: Tima 15.10.2006 2:46

помогите сделать проверку на кратность сумму чисел на N...

for i:=0 to m do a[i]:=i; { формируется 1-е сочетание}
repeat
use;
I:=m;

while a[i]=n-m+i do dec(i); {поиск элемента для изменения}
inc(a[i]);

if ( a[i] div n = 0 ) then inc(sum); {я сделал такую проверку правильно ли? если нет то какую нужно?}


for j:=i+1 to m do a[j]:=a[j-1]+1; {изменение правой части сочетания}

then
inc(sum);}

until i=0;

Автор: volvo 15.10.2006 2:48

Надо проверять остаток от деления...

if ( a[i] MOD n = 0 ) then inc(sum);


Причем ты это делаешь совершенно не там, где нужно... Я бы сделал это прямо в процедуре Use (перед выводом результатов):

Var
Data: array[1 .. n] of Integer; { <--- Это - твои N чисел }

procedure use;
var i, s: integer;
begin

s := 0;
for i:=1 to m do s := s + Data[a[ i ]];
if s mod n = 0 then
for i := 1 to m do write(Data[a[ i ]]:4);

end;

Автор: Tima 15.10.2006 2:55

спс..да что-то я с difom запарился точно думал про одно написал про другое, спс=))