Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.77/26: Рейтинг темы: голосов - 26, средняя оценка - 4.77
6 / 6 / 3
Регистрация: 14.10.2014
Сообщений: 85

Поставить перед некоторыми из чисел минусы так, чтобы сумма всех чисел в таблице оказалась равна нулю

04.11.2014, 01:08. Показов 4865. Ответов 13
Метки нет (Все метки)

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

Ввод
Первая строка содержит число N (1 ≤ N ≤ 100 000). Следующие N строк содержат по одному числу каждая. Это исходная таблица чисел. Гарантируется, что в ней присутствуют все числа от 1 до N по одному разу.
Вывод
Первая строка должна содержать "YES" или "NO" (заглавными буквами, без кавычек), в зависимости от того, можно ли расставить минусы требуемым образом. Если можно, то следующие N строк должны содержать плюс или минус в зависимости от того, с каким знаком число в соответствующей строке входного файла входит в сумму.

Ввод 1 Ввод 2
1_________1
__________4
__________2
__________3
__________1
__________4

Вывод 1 Вывод 2
NO_______YES
__________+
__________+
__________-

Я вообще не шарю что тут... вроде задача понятна... но примеры сбили немножко с толку.
__________-
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
04.11.2014, 01:08
Ответы с готовыми решениями:

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

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

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

13
2511 / 1132 / 582
Регистрация: 07.06.2014
Сообщений: 3,286
04.11.2014, 01:46
Цитата Сообщение от qwerty100 Посмотреть сообщение
но примеры сбили немножко с толку.
так, как Вы их привели, они любого с толку собъют!

посмотрите на эту задачу - http://atpp.vstu.edu.ru/cgi-bi... id_prb=173
так примеры понятней?

Добавлено через 12 минут
а задачка несложная.. по формуле https://www.cyberforum.ru/cgi-bin/latex.cgi?\frac{(1+N)*N}{2} определяете сумму всех чисел от 1 до N
если число получилось нечётное, то ответ NO и готово,
если чётное, то ответ YES и дальше для каждого числа вычисляете его позицию в ряду и, соответственно, знак + или минус...
0
6 / 6 / 3
Регистрация: 14.10.2014
Сообщений: 85
04.11.2014, 09:00  [ТС]
а как узнать сколько именно надо строк поймать?
0
2511 / 1132 / 582
Регистрация: 07.06.2014
Сообщений: 3,286
04.11.2014, 12:13
Цитата Сообщение от qwerty100 Посмотреть сообщение
а как узнать сколько именно надо строк поймать?
в первой строке находится собственно число N
Читаете и парсите ( Int.Parse() ) первую строчку входного файла, получаете число N
0
6 / 6 / 3
Регистрация: 14.10.2014
Сообщений: 85
04.11.2014, 15:33  [ТС]
Sergio Leone,а, точно... а я и не заметил... в условии же есть...

Добавлено через 24 минуты
Но я всё равно не особо понял как расставлять плюсы и минусы(

Добавлено через 49 секунд
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
static void Main(string[] args)
        {
            int a = int.Parse(Console.ReadLine());
            int[] mas = new int[a];
            for (int i = 0; i < a; i++)
                mas[i] = int.Parse(Console.ReadLine());
            double n = ((a+1)*a)/2;
            if (n % 2 != 0)
                Console.WriteLine("NO");
            else
            {
                Console.WriteLine("YES");
                for (int i = 0; i < a; i++)
                {
                    Console.WriteLine(????что тут?????);
                }
            }
            Console.ReadKey();
        }
0
2511 / 1132 / 582
Регистрация: 07.06.2014
Сообщений: 3,286
04.11.2014, 17:22
Цитата Сообщение от qwerty100 Посмотреть сообщение
Но я всё равно не особо понял как расставлять плюсы и минусы(
Угу.
Кодом не помогу (ибо на компе инструментов нет, а скачивать и ставить (или пользоваться онлайн сервисами) - лень.
Да и вообще, в праздник кодить грешно!

А идею подскажу.
Смотрите, если бы числа были записаны подряд, Вы знали бы, где расставить минусы, а где плюсы?!
вот, например, N = 7
1
2
3
4
5
6
7

Мы выяснили, что данный ряд может быть плюсами/минусами превращён в ноль.
Где должны быть плюсы, а где минусы?

Сумма ряда равна 28. Очевидно, что половина сумма (14) должна быть со знаком плюс, половина - со знаком минус.

Подсказываю. Есть центр ряда. число в центре - 4. число до него - 3
сумма 4+3 = 7. Маловато будет.
Нужно ещё взять соседей. Соседи - это число 2 и число 5.
сумма равна 14.
для центральных чисел ставим минус, для окраиных - плюс.

Теперь нужно рассмотреть этот алгоритм для другого, большого N (например, для N=12)
выявите, как вычислить разницу для чисел, удалённых от центра...

После выявления зависимости и установки алгоритма уже можно писать программу:
читаем в цикле числа, проверяем их удалённость от центра ряда, если удалённость больше нужной - то этому числу ставим знак плюс, иначе - знак минус.

Как то так...
0
6 / 6 / 3
Регистрация: 14.10.2014
Сообщений: 85
04.11.2014, 22:00  [ТС]
я, короче сделал задачу... но на 11 тесте у меня вылетает тайм лимит... как его можно избежать... это надо либо всю програмку переделать либо... ещё что-то... помогите, пожалуйста(ридкей оставил для вас, чтоб вам его не набирать лишний раз)
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
 
namespace ConsoleApplication2
{
    class Program
    {
        static void Main(string[] args)
        {
            
            int a = int.Parse(Console.ReadLine());
            int[] mas = new int[a];
            for (int i = 0; i < a; i++)
                mas[i] = int.Parse(Console.ReadLine());
            double summa = 0;
            for (int i = 0; i < a; i++)
                summa += mas[i];
            summa = summa / 2;
            if(summa%1!=0)
                Console.WriteLine("NO");
            else
            {
                Console.WriteLine("YES");
                int [] sort_mas = new int[a];
                for (int i = 0; i < a; i++)
                    sort_mas[i] = mas[i];
                Array.Sort(sort_mas);
                char[] sortcount = new char[a];
                
                {
                    for(int i=(a-1);i>=0;i--)
                    {
                        sortcount[i] = '-';
                        if ((summa - sort_mas[i]) >= 0)
                        {
                            summa = summa - sort_mas[i];
                            sortcount[i] = '+';
                        }
                    }
                }
                char[] count = new char[a];
                
                for (int i = 0; i < a;i++ )
                {
                    for (int j=0; j<a; j++)
                    {
                        if(mas[i]==sort_mas[j])
                        {
                             count[i]=sortcount[j];
                        }
                    }
                    Console.WriteLine(count[i]);
                }
                    
 
            }
            Console.ReadKey();
        }
    }
}
0
2511 / 1132 / 582
Регистрация: 07.06.2014
Сообщений: 3,286
04.11.2014, 22:36
Цитата Сообщение от qwerty100 Посмотреть сообщение
C#
1
if(summa%1!=0)
простите, а почем единица? Вроде чётность/нечётность это остаток от деления на 2 ?!

простите, основной алгоритм не смотрел, завтра гляну. Если Вы раньше сами не разберетесь, конечно...
0
6 / 6 / 3
Регистрация: 14.10.2014
Сообщений: 85
04.11.2014, 22:38  [ТС]
Sergio Leone, я сумму поделил на 2... а потом просто убедился, что она -- целое число
0
2511 / 1132 / 582
Регистрация: 07.06.2014
Сообщений: 3,286
04.11.2014, 22:59
Цитата Сообщение от qwerty100 Посмотреть сообщение
я сумму поделил на 2... а потом просто убедился, что она -- целое число
сумма ВСЕГДА целое число. Ну подумайте сами, если вы сложите ЦЕЛЫЕ числа от 1 до N, то сумма будет ЦЕЛЫМ числом или нет?!

а вот проверка на чётность нужна.
я бы попробовал этот кусочек так переписать:
C#
1
2
3
4
5
6
7
8
            int N = int.Parse(Console.ReadLine());
            int summa = (1+N)*N/2;
            if(summa%2!=0)
                Console.WriteLine("NO");
            else
            {
                Console.WriteLine("YES");
......
да и массив тут не нужен, читайте построчно и сразу выводите ответ: плюс или минус...
0
6 / 6 / 3
Регистрация: 14.10.2014
Сообщений: 85
04.11.2014, 23:15  [ТС]
Sergio Leone, тогда надо сильно менять программу... а я новичёк ещё... ничерта не смогу решить(
а ещё... я проверял, будет ли сумма, которую я переполовинил целым числом
0
Платежеспособный зверь
 Аватар для кот Бегемот
8966 / 4389 / 1655
Регистрация: 28.10.2009
Сообщений: 11,647
21.11.2014, 00:08
qwerty100, это олимпиадная задача, она решается не тремя вложенными циклами, а за 1 проход по массиву. Но алгоритм достаточно сложен (составные ветвления), чтобы объяснить его в двух словах. Вряд ли новичкам имеет смысл браться за такие задачи.
0
6 / 6 / 3
Регистрация: 14.10.2014
Сообщений: 85
22.11.2014, 12:58  [ТС]
кот Бегемот, такая у наш домашка
0
Платежеспособный зверь
 Аватар для кот Бегемот
8966 / 4389 / 1655
Регистрация: 28.10.2009
Сообщений: 11,647
22.11.2014, 16:15
Цитата Сообщение от Sergio Leone Посмотреть сообщение
Как то так...
Нет, не так. Алгоритм я расписал в теме
Как вычислить сумму массива?
Программу писал на Паскале, СИ не знаю
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
22.11.2014, 16:15
Помогаю со студенческими работами здесь

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

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

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

Определить, сколько чисел необходимо, чтобы их сумма оказалась больше заданного числа
Написать программу, которая находит сколько чисел необходимо, чтобы сумма 5+(2*5) + (3*5) +...(N*5) оказалась больше заданного числа.

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


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

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка SDL3, Box2D, FreeType и SDL3_ttf из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru