Форум программистов, компьютерный форум CyberForum.ru

Распределить числа в два массива так, чтобы разность между их суммами была минимальной - C++

Восстановить пароль Регистрация
 
_Лето_
1 / 1 / 0
Регистрация: 03.11.2013
Сообщений: 68
14.12.2013, 19:03     Распределить числа в два массива так, чтобы разность между их суммами была минимальной #1
Задача: дан массив N чисел. Нужно раскидать эти числа в два массива так, чтобы разность между их суммами была минимальной.
Пример: 100 1 2 3 4
Берем первое число - 100, кидаем в первый массив, во втором - 0. Берем второе - 1, кидаем туда, где сумма чисел меньше, т.е. во второй (1 - 100, 2 -1). Третье числи - 2. В первом - 100, меньше во втором, значит кидаем туда и т.д. В итоге получится в первом - 100, во втором - 1+2+3+4

Вот код. Но почему то он не пашет. Пожалуйста, найдите ошибку.

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
#include <iostream>
using namespace std;
const int N=5;
int main(){
int B[N],C[N],i,j,t;
int A[]={8,7,7,5,5};
for(int i=0;i<N;i++){ //сортируем камни по возрастанию их веса//
        for (int j=0;j<N-i;j++){
    if (A[j]>A[j+1]){
    t=A[j];
    A[j]=A[j+1];
    A[j+1]=t;}}}
     cout <<"otsortirovanniy massiv =>  ";
    for (int i=0;i<N;i++)
    cout<< A[i] <<" ";
    cout<<endl;
int Sum=0;
        for (int j=0;j<N;j++){
                if(A[j]!=A[5])
        {Sum += A[j];}}
        cout<<"Summa vesov = "<<Sum<< '\n';
int d=Sum/2;//находим полусумму//
cout<<"polusumma = "<<d<<endl;
int newsum=0;
for(i>0;i=N-1;i--){
    for(int j=0;j<N;j++){
         for(int k=0;k<N;k++){
    if (A[i]<d&&newsum<d)
        B[j]=A[i],newsum=newsum+B[j];
        else
        C[k]=A[i];}}}}
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.12.2013, 19:03     Распределить числа в два массива так, чтобы разность между их суммами была минимальной
Посмотрите здесь:

Разложить камни на 2 кучки так, чтобы разница масс этих кучек была минимальной. C++
C++ Задача. Распределить заказы между предприятиями так, чтобы надежность собираемых из них устройств была наибольшей
C++ В матрице выбрать n элементов в разных строках и разных столбцах так, чтобы их сумма была минимальной
Разложить число в массив так, чтобы элементами была последовательность с единицы о этого числа C++
C++ Отсортировать строки массива так, чтобы первой шла строка, сумма элементов которой была меньше, чем остальных
C++ Объединить два массива так, чтобы числа в новом массиве не повторялись
Распределить камни в две кучи так, чтобы модуль разности весов этих двух куч был минимальным C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ValeryS
Модератор
6413 / 4879 / 448
Регистрация: 14.02.2011
Сообщений: 16,176
14.12.2013, 19:09     Распределить числа в два массива так, чтобы разность между их суммами была минимальной #2
читать не удобно пользуйся тегом C++
Цитата Сообщение от _Лето_ Посмотреть сообщение
int B[N],C[N],
в этих массивах мусор
я не вижу где ты их обнуляешь

Добавлено через 1 минуту
Цитата Сообщение от _Лето_ Посмотреть сообщение
for(i>0;i=N-1;i--)
это что?
чем ты инициализируешь переменную цикла
и где условие выхода?
programina
 Аватар для programina
1912 / 597 / 37
Регистрация: 23.10.2011
Сообщений: 4,468
Записей в блоге: 2
14.12.2013, 19:17     Распределить числа в два массива так, чтобы разность между их суммами была минимальной #3

Не по теме:

Цитата Сообщение от _Лето_ Посмотреть сообщение
];}}}}
Программировали бы себе дальше на хаскеле



Чтобы создать массив с нулями нужно делать так:
C++
int A[N] = {0};
_Лето_
1 / 1 / 0
Регистрация: 03.11.2013
Сообщений: 68
14.12.2013, 19:27  [ТС]     Распределить числа в два массива так, чтобы разность между их суммами была минимальной #4
ValeryS, то есть мне нужно вот так сделать?
C++
1
2
3
int B[N]=0,C[N]=0;
int i,j,t;
int A[]={8,7,7,5,5}; //его тоже нужно изначально обнулить?
а здесь что изменить? Я не совсем понял...

C++
1
for(i>0;i=N-1;i--)
User409368
191 / 168 / 6
Регистрация: 09.09.2013
Сообщений: 524
14.12.2013, 19:27     Распределить числа в два массива так, чтобы разность между их суммами была минимальной #5
Сообщение было отмечено автором темы, экспертом или модератором как ответ
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
#include <iostream>
#include <stdlib.h>
#include <stdio.h>
 
void PrintArray(const int *arr, int size);
 
 
int main()
{
    const int    N = 5;
    int   arr[N] = {8, 7, 7, 5, 5};
    int    arr1[N] = {},  sum1 = 0;
    int     arr2[N] = {},  sum2 = 0;
 
    for (int i=0, i1=0, i2=0;  i<N;  ++i)
    {
        if (sum1 < sum2)
        {
            arr1[i1++] = arr[i];
            sum1 += arr[i];
        }
        else
        {
            arr2[i2++] = arr[i];
            sum2 += arr[i];
        }
    }
 
    PrintArray(arr, N);
    PrintArray(arr1, N);
    PrintArray(arr2, N);
 
    system("pause");
    return 0;
}
 
 
void PrintArray(const int *arr, int size)
{
    int sum = 0;
 
    for (int i=0; i<size; ++i)
    {
        std::cout << arr[i] << " ";
        sum += arr[i];
    }
    std::cout << "sum = " << sum << std::endl;  // можно убрать
}
_Лето_
1 / 1 / 0
Регистрация: 03.11.2013
Сообщений: 68
14.12.2013, 19:33  [ТС]     Распределить числа в два массива так, чтобы разность между их суммами была минимальной #6
_, спасибо огромное
User409368
191 / 168 / 6
Регистрация: 09.09.2013
Сообщений: 524
14.12.2013, 19:36     Распределить числа в два массива так, чтобы разность между их суммами была минимальной #7
_Лето_, у меня немного неправильно. нужно еще добавить сортировку массива

Добавлено через 37 секунд
добавить до цикла for()
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.12.2013, 20:20     Распределить числа в два массива так, чтобы разность между их суммами была минимальной
Еще ссылки по теме:

C++ Рандомное заполнение массива так, чтобы числа в нем не повторялись
C++ Распределить элементы массива так, чтобы сначала стояли положительные, а потом отрицательные
Гипотеза Гольдбаха: найти два таких простых числа, чтобы их сумма была равна заданному C++
Распределить камни в две кучи так, чтобы разность весов этих двух куч была минимальной C++
Объединить два массива в один так, чтобы в полученном массиве были только не совпадающие элементы C++

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

Или воспользуйтесь поиском по форуму:
ValeryS
Модератор
6413 / 4879 / 448
Регистрация: 14.02.2011
Сообщений: 16,176
14.12.2013, 20:20     Распределить числа в два массива так, чтобы разность между их суммами была минимальной #8
Цитата Сообщение от _Лето_ Посмотреть сообщение
int B[N]=0,C[N]=0;
нет
тебе programina, показала
Цитата Сообщение от programina Посмотреть сообщение
int A[N] = {0};
Цитата Сообщение от _Лето_ Посмотреть сообщение
int A[]={8,7,7,5,5}; //его тоже нужно изначально обнулить?
зачем ? там лежат твои данные
Цитата Сообщение от _Лето_ Посмотреть сообщение
а здесь что изменить? Я не совсем понял...
проанализируй что ты написал
я мог бы тебе написать правильный вариант
но тогда ты не поймешь ошибку и будешь делать еще и еще раз
у тебя в программе куча for-ов просто сравни
Yandex
Объявления
14.12.2013, 20:20     Распределить числа в два массива так, чтобы разность между их суммами была минимальной
Ответ Создать тему
Опции темы

Текущее время: 14:43. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru