Помощь - Поиск - Пользователи - Календарь
Полная версия: нахождение суммы
Форум «Всё о Паскале» > 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.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.