Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.74/50: Рейтинг темы: голосов - 50, средняя оценка - 4.74
4 / 4 / 0
Регистрация: 07.09.2009
Сообщений: 190

Разделить массив на две равные части, суммы элементов которых наиболее близки к равности

02.06.2012, 00:06. Показов 9454. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Мне нужно разделить массив на две равные части, суммы элементов которых наиболее близки к равности. Как разделить массив по на две части я знаю. Но не могу придумать, как сделать чтобы суммы элементов этих двух частей были равны. Прошу подсказать.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
02.06.2012, 00:06
Ответы с готовыми решениями:

Разделить массив на две половины так, чтобы сумма значений элементов были максимально близки
Здравствуйте!!! :help::help:Помогите мне ... :help::help:У меня ЗАВТРА экзамен.... В морском порту города Владивостока хранятся N...

Дана строка. Необходимо разделить ее на две равные части
Дана строка. Необходимо разделить ее на две равные части (если длина строки — четная, а если длина строки нечетная, то длина первой части...

Разбить массив на две равные части (или приблизительно равные)
Задали задание. Нужно разбить одномерный массив на две почти равные части(если на равные не получается). Написал программу, однако...

6
 Аватар для Lasur
267 / 257 / 43
Регистрация: 18.03.2012
Сообщений: 506
02.06.2012, 00:30
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
var arr = new[] { 1, 2, 3, 4 };
var minDiff =
    Enumerable.Range(0, 1 << arr.Length).Select(
        i =>
        new
            {
                part1 = arr.Where((el, index) => ((1 << index) & i) != 0),
                part2 = arr.Where((el, index) => ((1 << index) & i) == 0)
            }).OrderBy(arg => Math.Abs(arg.part1.Sum() - arg.part2.Sum())).First();
 
Console.WriteLine("Part1:");
foreach (var i in minDiff.part1)
    Console.Write("{0}, ", i);
 
Console.WriteLine("\nPart2:");
foreach (var i in minDiff.part2)
    Console.Write("{0}, ", i);
P.S. Работает для массива не более чем на 32 элемента.
P.S.S. Вот эту строку
C#
1
.OrderBy(arg => Math.Abs(arg.part1.Sum() - arg.part2.Sum())).First();
можно было ускорить, если бы только я знал как в LINQ получить объект, представляющий минимальное значение по определенному селектору. Min, к сожалению, представляет само значение, а не объект.
0
101 / 101 / 12
Регистрация: 21.11.2011
Сообщений: 169
03.06.2012, 00:06
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
        static void Main()
        {
            var arr = new[] { 1, 9, 6, 3, 4, 2, 5, 9 };
            Array.Sort(arr);
            var part1 = Enumerable.Range(0, arr.Length / 2).Select(i => arr[i * 2 + ((i % 2 == 0) ? 0 : 1)]); 
            var part2 = Enumerable.Range(0, arr.Length / 2).Select(i => arr[i * 2 + ((i % 2 != 0) ? 0 : 1)]);
 
            Console.WriteLine("Part1: [{0}] Sum = {1}"
                , String.Join(", ", part1.Select(e => e.ToString()).ToArray())
                , part1.Sum());
 
            Console.WriteLine("Part2: [{0}] Sum = {1}"
                , String.Join(", ", part2.Select(e => e.ToString()).ToArray())
                , part2.Sum());
 
            Console.ReadKey();
        }
не точно . зато для любого размера

Добавлено через 1 час 0 минут
а вообще все гораздо проще
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
        static void Main()
        {
            var arr = new[] { 1, 9, 8, 1, 4, 2, 5, 29, 5, 5 };
 
            Array.Sort(arr);
            var part1 = new List<int>();
            var part2 = new List<int>();
            int s1 = 0, s2 = 0;
            for (int i = arr.Length - 1; i >= 0; i--)
            {
                if (((s2 > s1) && (part1.Count < arr.Length / 2)) || (part2.Count >= arr.Length / 2))
                     { s1 += arr[i]; part1.Add(arr[i]); }
                else { s2 += arr[i]; part2.Add(arr[i]); }
            }
 
            Console.WriteLine("Part1: [{0}] Sum = {1}", String.Join(", ", part1.Select(e => e.ToString()).ToArray()), part1.Sum());
            Console.WriteLine("Part2: [{0}] Sum = {1}", String.Join(", ", part2.Select(e => e.ToString()).ToArray()), part2.Sum());
 
            Console.ReadKey();
        }
0
 Аватар для Lasur
267 / 257 / 43
Регистрация: 18.03.2012
Сообщений: 506
03.06.2012, 00:16
hiddentool, оба метода работают неправильно для, например, такого массива:
C#
1
var arr = new[] { 1, 1, 1, 1, 4 };
Название: 1.JPG
Просмотров: 1132

Размер: 12.0 КбНазвание: 2.JPG
Просмотров: 1137

Размер: 11.8 Кб
0
101 / 101 / 12
Регистрация: 21.11.2011
Сообщений: 169
03.06.2012, 00:29
Цитата Сообщение от Lasur Посмотреть сообщение
hiddentool, оба метода работают неправильно для, например, такого массива:
C#
1
var arr = new[] { 1, 1, 1, 1, 4 };
"Разделить массив на две равные части"
5 элементов на равные части не делятся никак
0
 Аватар для Lasur
267 / 257 / 43
Регистрация: 18.03.2012
Сообщений: 506
03.06.2012, 00:32
Моя ошибка, неправильно прочитал условие... В таком случае, мой метод выше решает несколько иную задачу)
0
0 / 0 / 0
Регистрация: 10.07.2014
Сообщений: 9
10.04.2018, 17:53
Lasur, Lasur, Здравствуйте. Будьте добры, прокомментируйте, пожалуйста свой код с этой темы. Мне очень интересно, что там происходит, хочу разобраться и "перевести" на с++
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
10.04.2018, 17:53
Помогаю со студенческими работами здесь

Проверить, можно ли разделить монеты и купюры гонорара на две равные части?
Инопланетяне с планеты Пандора уже много лет исследуют землян. Для этого на Землю внедрено множество агентов-пандорианцев. Так как...

Разделить число m на две части, разность которых равна 5
Разделить число m на две части, разность которых равна 5. Помогите с кодом пожалуйста.

Ввести массив из n чисел, разбить массив на две примерно равные части и вывести числа в отдельном окне
Ввести массив из n чисел, разбить массив на две примерно равные части и вывести числа из каждой части в отдельном окне, получив два окна с...

Разделить массив на две части
Помогите решить адачку очень срочно надо Разделить массив на две части, поместив в первую элементы, большие среднего...

Разделить массив на две части
Помогите с решением задачи. Условие вот такое &quot;дан массив целых чисел, лежащих в диапазоне , размерность массива - 10. Разделить массив на...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru