Желательно c++ или c#. А так не важно. Легенда гласит, что Карл Фридрих Гаусс, учась в...

0 голосов
38 просмотров

Желательно c++ или c#. А так не важно. Легенда гласит, что Карл Фридрих Гаусс, учась в школе, смог быстро посчитать сумму целых чисел от 1 до 100, заметив, что 1 + 100 = 2 + 99 = … = 50 + 51. Теперь решите задачу посложнее: можно ли перед каждым из чисел от 1 до N расставить знаки «+» или «–» так, чтобы сумма получившихся чисел была равна 0? Например, для N = 3 сумма –1 –2 +3 будет равна 0, а для N = 2 этого сделать нельзя. Программа получает на вход целое неотрицательное число N, не превосходящее 10в(5)степени. Программа должна вывести последовательность из N символов «+» или «–», соответствующих знакам, которые нужно расставить перед числами от 1 до N так, чтобы сумма получившихся чисел была равна 0. Если задача имеет несколько решений, нужно вывести один (лобой) ответ. Если задача не имеет решения для данного N, нужно вывести одно слово «IMPOSSIBLE». Ввод: 3 2 Вывод: --+ IMPOSSIBLE Примечание: Правильным ответом будет также «++-»


Информатика (654k баллов) | 38 просмотров
Дан 1 ответ
0 голосов

Вот тебе в паскале


program ryad_chisel;

var N, t:integer;

begin

read(N);

t:=(N*(N+1))div 2;

if t mod 2 =1 then writeln('IMPOSSIBLE')

else begin

     if N mod 2 =0 then begin

                        t:=N div 4;

                        repeat

                        write('+');

                        t:=t-1;

                        until t=0;

                        t:=N div 2;

                        repeat

                        write('-');

                        t:=t-1;

                        until t=0;

                        t:=N div 4;

                        repeat

                        write('+');

                        t:=t-1;

                        until t=0;

                        end

     else begin

          t:=((N+1) div 4)-1;

          repeat

          write('+');

          t:=t-1;

          until t=0;

          t:=((N-1) div 2)+1;

          repeat

          write('-');

          t:=t-1;

          until t=0;

          t:=(N+1) div 4;

          repeat

          write('+');

          t:=t-1;

          until t=0;

          end

     end    

end.

(654k баллов)