Задача 3. Расстановка знаков Легенда гласит, что Карл Фридрих Гаусс, учась в школе, смог быстро посчитать сумму всех целых чисел от 1 до 100, заметив, что 1 + 100 = 2 + 99 = … = 50 + 51 = 101. Поэтому сумма всех целых чисел от 1 до 100 равна 101 × 50 = 5050. Теперь решите задачу посложнее: как расставить перед каждым из чисел от 1 до N знаки «+» или «−» так, чтобы сумма получившихся чисел была равна 0? Например, для N = 3 сумма −1 −2 +3 будет равна 0. Решите эту задачу для четырёх значений N: N = 8, N = 15, N = 40, N = 99. Ответ на эту задачу нужно записать в виде 4 строк. Каждая строка должна содержать только знаки «+» и «−». В первой строке должно быть 8 знаков, во второй строке – 15, в третьей – 40, в четвертой – 99. Последовательность знаков в каждой строке соответствует последовательности знаков, которые нужно расставить перед числами 1, 2, …, N так, чтобы сумма была равна 0. Например, для N = 3 ответ нужно записать в виде «++−» или «−−+». Если вы не можете решить задачу для какого-то значения N, то поставьте в этой строке один знак «+». Решение будет принято на проверку, если оно содержит четыре строки, каждая из которых состоит из символов «+» или «−». Количество символов в строках и правильность ответа сразу после сдачи не проверяется.
Ответы
javascript:
function Вычислить(число) {
var массив = [], м1 = [], м2 = [], с1 = 0, с2 = 0;
for (let сч = 1; сч <= число; сч++) массив.push(сч);
for (let сч = число - 1; сч >= 0; сч--)
if (с1 > с2) { м2.push(массив[сч]); с2 += массив[сч]; }
else { м1.push(массив[сч]); с1 += массив[сч]; }
if (с1 != с2) return false;
else {
var рез = "";
for (let сч = 1; сч <= число; сч++)
if (м1.indexOf(сч) != -1) рез += "+"; else рез += "-";
return рез;
}
}
document.write(Вычислить(8) + "<br />");
document.write(Вычислить(15) + "<br />");
document.write(Вычислить(40) + "<br />");
document.write(Вычислить(99) + "<br />");
+--++--+
--++--++--++--+
+--++--++--++--++--++--++--++--++--++--+
--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--+