Форум программистов, компьютерный форум, киберфорум
PascalABC.NET
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.70/47: Рейтинг темы: голосов - 47, средняя оценка - 4.70
1 / 1 / 0
Регистрация: 17.08.2017
Сообщений: 142
1

Можно ли перед каждым из чисел от 1 до N расставить знаки «+» или «–» так, чтобы сумма получившихся чисел была равна 0?

24.10.2018, 19:52. Показов 9247. Ответов 12
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Решить пробовал , но это не о чем , не одного правильного вывода не было , окало часа шаманил , но голяк (только в школе циклы прошли и на тебе (1 год обучения))
Легенда гласит, что Карл Фридрих Гаусс, учась в школе, смог быстро посчитать
сумму целых чисел от 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
Примечание:
Правильным ответом будет также «++-»

Добавлено через 26 минут
Извините за опечатки.
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
24.10.2018, 19:52
Ответы с готовыми решениями:

Можно ли перед каждым из чисел от 1 до N расставить знаки «+» или «–» так, чтобы сумма получившихся чисел была равна 0?
Легенда гласит, что Карл Фридрих Гаусс, учась в школе, смог быстро посчитать сумму целых чисел от 1...

Можно ли перед каждым из чисел от 1 до N расставить знаки «+» или «–» так, чтобы сумма получившихся чисел была равна 0?
Легенда гласит, что Карл Фридрих Гаусс, учась в школе, смог быстро посчитать сумму целых чисел от 1...

Расставить плюсы и минусы так, чтобы сумма всех чисел была равна нулю
Задача такова: В файле input.txt есть массив чисел. Первая строка данного файла содержит число N...

Расставить числа 1...9 в пустые ячейки квадрата размером 3x3 так, чтобы сумма чисел в каждой строке, в столбце, а также по диагоналям была равна 15
Не правильно работает программа. Тема: матрица. Расставьте числа 1, 2, 3, 4, 5, 6, 7, 8, 9 в...

12
2105 / 1192 / 496
Регистрация: 11.10.2018
Сообщений: 6,000
24.10.2018, 19:57 2
Так знаки обязательно меняются или как попало?
1
2308 / 1419 / 516
Регистрация: 07.04.2017
Сообщений: 4,721
24.10.2018, 19:58 3
Лучший ответ Сообщение было отмечено David099 как решение

Решение

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
function GetAllBoolArr(a: array of boolean; i: integer): sequence of array of boolean;
begin
  if i=a.Length then
    yield a else
  begin
    var temp := Copy(a);
    yield sequence GetAllBoolArr(temp, i+1);
    temp[i] := true;
    yield sequence GetAllBoolArr(temp, i+1);
  end;
end;
 
begin
  var res :=
  GetAllBoolArr(new boolean[ReadlnInteger],0)
  .FirstOrDefault(a->a.Numerate.Sum(t->t[1]?t[0]:-t[0])=0);
  
  if res=nil then
    writeln('IMPOSSIBLE') else
    res.Select(b->b?'+':'-').Println;
end.
1
1 / 1 / 0
Регистрация: 17.08.2017
Сообщений: 142
24.10.2018, 20:17  [ТС] 4
Рандомно
0
1 / 1 / 0
Регистрация: 17.08.2017
Сообщений: 142
24.10.2018, 20:33  [ТС] 5
Все работает .но (если не сложно) можешь помочь (я не лентяй , просто только начали изучать паскаль я на циклах)
Миниатюры
Можно ли перед каждым из чисел от 1 до N расставить знаки «+» или «–» так, чтобы сумма получившихся чисел была равна 0?  
0
2308 / 1419 / 516
Регистрация: 07.04.2017
Сообщений: 4,721
24.10.2018, 21:18 6
А можно каким то образом узнать какая именно ошибка вылазит в 20-22? У меня всё ок.
0
0 / 0 / 0
Регистрация: 24.10.2018
Сообщений: 2
24.10.2018, 21:49 7
Это данные, которые выводит программа по подсчету правильных ответов, соответственно узнать входной поток не возможно
Доступен только тест №1 и 2
Миниатюры
Можно ли перед каждым из чисел от 1 до N расставить знаки «+» или «–» так, чтобы сумма получившихся чисел была равна 0?  
0
Status 418
Эксперт Python
4577 / 2344 / 602
Регистрация: 26.11.2017
Сообщений: 5,265
Записей в блоге: 3
25.10.2018, 07:16 8
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
begin
  var n:=ReadInteger;
  if n mod 4 in [0,3] then
  begin
    var s:='';
    // тут генерируем ответ, любой. Так как чекер отрабатывает в проверяющей системе.
    // подумайте как это сделать.
    s.Print
  end
  else
    Print('IMPOSSIBLE')
end.
0
Модератор
Эксперт Pascal/DelphiЭксперт NIX
7769 / 4598 / 2823
Регистрация: 22.11.2013
Сообщений: 13,077
Записей в блоге: 1
26.10.2018, 09:10 9
Поступило такое предложение, что думает на этот счет проверочный сайт?
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
var
  n, i, k: Integer;
begin
  Read(n);
  if (n+1) mod 4<2 then begin
    k:=(n+1) div 4;
    for i:=1 to n-k*3 do Write('+');
    for i:=1 to k*2 do Write('-');
    for i:=1 to k do Write('+');
    WriteLn;
  end else WriteLn('IMPOSSIBLE');
end.
Добавлено через 2 минуты
Обсуждение было там: Можно ли перед каждым из чисел от 1 до N расставить знаки «+» или «–» так, чтобы сумма получившихся чисел была равна 0?
0
Status 418
Эксперт Python
4577 / 2344 / 602
Регистрация: 26.11.2017
Сообщений: 5,265
Записей в блоге: 3
26.10.2018, 10:11 10
А
Цитата Сообщение от bormant Посмотреть сообщение
что думает на этот счет проверочный сайт?
а так что скажет?)
Pascal
1
2
3
4
5
6
var
  s := '-' + '++--' * 25000;
  n := ReadInteger;
begin
  Print(n mod 4 in [0, 3] ? s[n::-1] : 'IMPOSSIBLE')
end.
0
Модератор
Эксперт Pascal/DelphiЭксперт NIX
7769 / 4598 / 2823
Регистрация: 22.11.2013
Сообщений: 13,077
Записей в блоге: 1
26.10.2018, 10:45 11
eaa,
вопрос не по адресу.

Добавлено через 24 минуты
И зачем 25000, если достаточно (n+1) div 4?
Pascal
1
2
3
4
5
6
var
  n := ReadInteger;
  s := '-' + '++--' * ((n+1) div 4);
begin
  Print((n+1) mod 4 < 2 ? s[n::-1] : 'IMPOSSIBLE')
end.
Добавлено через 2 минуты
Легко проверить по крайней мере те, которые (n+1) mod 4<2 (или n mod 4 in [0,3]) -- просто посчитать сумму и сравнить с 0.
0
Status 418
Эксперт Python
4577 / 2344 / 602
Регистрация: 26.11.2017
Сообщений: 5,265
Записей в блоге: 3
26.10.2018, 10:59 12
Достаточно и (n + 1) div 4, а так как число не больше 10^5, то 25000.
Если будет переполнение по памяти, то оно будет сразу, а не на тесте с самом большом входном числе.
Тогда придется выводить посимвольно.

проверить можно так:
Pascal
1
Println(s[n::-1].Select((x, i)-> (x = '+' ? 1 : -1) * int64(i + 1)).Sum)
0
Модератор
Эксперт Pascal/DelphiЭксперт NIX
7769 / 4598 / 2823
Регистрация: 22.11.2013
Сообщений: 13,077
Записей в блоге: 1
26.10.2018, 11:39 13
Достаточно:
Pascal
1
2
3
4
begin
  var n:= ReadInteger;
  Print((n+1) mod 4 < 2 ? ('-++-' * ((n+1) div 4))[n::-1] : 'IMPOSSIBLE');
end.
Добавлено через 13 минут
То же самое в классическом стиле (Turbo Pascal / Free Pascal / Delphi):
Pascal
1
2
3
4
5
6
7
8
9
10
const s: String[4] = '-++-';
var n: Integer;
begin
  Read(n);
  if (n+1) mod 4<2 then begin
    Write(Copy(s,1+Ord(Odd(n)),4));
    for n:=1 to (n-1) div 4 do Write(s);
    WriteLn;
  end else WriteLn('IMPOSSIBLE');
end.
Добавлено через 12 минут
или чуть более универсально:
Pascal
1
2
3
4
5
6
7
8
9
var n: Integer;
begin
  Read(n);
  if (n-1) mod 4>1 then begin
    if not Odd(n) then Write('-'); Write('++-');
    for n:=1 to (n-1) div 4 do Write('-++-');
    WriteLn;
  end else WriteLn('IMPOSSIBLE');
end.
0
26.10.2018, 11:39
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
26.10.2018, 11:39
Помогаю со студенческими работами здесь

Можно ли так переставить цифры в числах А и В, чтобы сумма этих чисел была равна С?
Задача C. Сумма. (с.pas, с.exe) Даны три натуральных числа: A, Bи C (0 &lt;= A, B, C&lt;= 109). Можно ли...

Определить, можно ли в первых двух числах переставить цифры так, чтобы сумма конечных чисел была равна с
Даны 3 числа: a, b, c. Определить, можно ли в первых двух числах переставить цифры так, чтобы сумма...

Поставить перед некоторыми из чисел минусы так, чтобы сумма всех чисел в таблице оказалась равна нулю
Дана линейная таблица длиной N клеток. В клетках таблицы каким-то образом расставлены все...

Сгенерировать 5 случайных чисел так, чтобы их сумма была равна заданному числу
Всем привет. Необходимо сгенерировать и сохранить в массив 5 случайных чисел, но так, чтобы их...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru