Помощь - Поиск - Пользователи - Календарь
Полная версия: нахождение суммы
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Bard
Срочно wacko.gif ...пожалуйста помогите мне решить задачу... unsure.gif
из заданных 9 чисел нужно найти 7 из них сумма которых равна 100
Спасибо за ранее... smile.gif
мисс_граффити
как же мы можем помочь, если ты ничего не делаешь?
написать за тебя - это не помощь!
Bard

var
ar : array[1..9] of integer;
i, j, k, sum : integer;

begin
sum := 0;
for i := 1 to 9 do
begin
readln( ar[i] );
sum := sum + ar[i];
end;

for i := 1 to 9 do
for j := i+1 to 9 do
if sum -(ar[i] + ar[j]) = 100 then
for k := 1 to 9 do
writeln( аr[k] );
end.


Вот кое что есть lol.gif но чего то маленького не хватает... rolleyes.gif
КМА
Вот то что получилось у меня, пока только для положительных чисел, по сути доработка твоей идеи.


CONST n=9;

VAR
count: array [1..n] of word;
s: longInt;
i, j, k: byte;
flag: boolean;

BEGIN
{вводим 9 чисел и считаем их итоговую сумму}
s:=0;
for i:=1 to n do
begin
write (i,' ->');
readLn (count[i]);
s:=s+count[i]
end;

flag:=false;
i:=0;
{если итоговая сумма оказалась меньше 100, значит выходим}
if s<100
then flag:=true;
{вычитаем из итоговой суммы 2 других элемента, таким образом по завершению в i и j номера лишних элементов}
while (not flag) and (i<=n) do
begin
inc (i);
j:=i;
while (not flag) and (j<=n) do
begin
inc (j);
if (s-count[i]-count[j])=100
then flag:=true
end
end;

if (i=0) or (not flag)
then writeLn ('no variants')
else
begin
for k:=1 to n do
if (k<>i) and (k<>j)
then write (count[k], ' ');
writeLn (' obrazuiyt symmy 100')
end;

END.

Lapp
КМА, а знаешь, что нужно сделать, чтобы работало для всех чисел, а не только для положительных? Как делают скульпторы - отсечь лишнее.. smile.gif
Убери вот эти строки:

{если итоговая сумма оказалась меньше 100, значит выходим}
if s<100


Тут проверка i тоже лишняя:

if (i=0) or (not flag)


КМА
Да, я это понял...

Я это уже дорешал, но не было сил дописать решение. Спасибо Lapp.
klem4
Вот такой вариант еще:

const
n = 9;
type
TArray = array [1..n] of Integer;

function Sum(const arr: TArray; const a, b: Integer): Integer;
var
i, s: Integer;
begin
i := 1; s := 0;
while (i <= n) and (s <= 100) do begin
if (i <> a) and (i <> b) then inc(s, arr[i]);
inc(i);
end;
Sum := s;
end;

var
x: TArray = (25, 10, 25, 29, 1, 98, 5, 5, 56);
a, b: Integer;
flag: Boolean;

begin
a := 1; flag := false;

while (a <= n - 1) and not(flag) do begin
b := a + 1;
while (b <= n) and not(flag) do begin
flag := Sum(x, a, b) = 100;
if not(flag) then inc(b);
end;
if not(flag) then inc(a);
end;

if a <= n - 1 then writeln('Все числа, кроме ', x[a], ' и ', x[b])
else writeln('Решения нет');
end.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.