Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
_Лето_
1 / 1 / 0
Регистрация: 03.11.2013
Сообщений: 68
#1

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

14.12.2013, 19:03. Просмотров 629. Ответов 7
Метки нет (Все метки)

Задача: дан массив 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];}}}}
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.12.2013, 19:03
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Распределить числа в два массива так, чтобы разность между их суммами была минимальной (C++):

Распределить камни в две кучи так, чтобы разность весов этих двух куч была минимальной - C++
Ограничение времени: 1.0 секунды Ограничение памяти: 64 МБ У вас есть несколько камней известного веса w1, …, wn. Напишите...

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

Разложить камни на 2 кучки так, чтобы разница масс этих кучек была минимальной. - C++
Здравствуйте, помогите, пожалуйста, решить данную ниже задачу. У Вас есть N камней с массами W1, W2 , … WN. Требуется разложить камни...

В матрице выбрать n элементов в разных строках и разных столбцах так, чтобы их сумма была минимальной - C++
Помогите,пожалуйста Добавлено через 2 часа 23 минуты примерный алгоритм как это можно сделать

Объединить два массива так, чтобы числа в новом массиве не повторялись - C++
я даже их объединить не могу, они разной размерности и не выходит=( вот что я писала #include &lt;QCoreApplication&gt; #include &lt;iostream&gt;...

Распределить элементы массива так, чтобы сначала стояли положительные, а потом отрицательные - C++
Даны целые числа n одномерного массива. Полная программа на c++.

7
ValeryS
Модератор
7006 / 5344 / 527
Регистрация: 14.02.2011
Сообщений: 18,037
14.12.2013, 19:09 #2
читать не удобно пользуйся тегом C++
Цитата Сообщение от _Лето_ Посмотреть сообщение
int B[N],C[N],
в этих массивах мусор
я не вижу где ты их обнуляешь

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

Не по теме:

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



Чтобы создать массив с нулями нужно делать так:
C++
int A[N] = {0};
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--)
0
User409368
191 / 168 / 7
Регистрация: 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 / 1 / 0
Регистрация: 03.11.2013
Сообщений: 68
14.12.2013, 19:33  [ТС] #6
_, спасибо огромное
0
User409368
191 / 168 / 7
Регистрация: 09.09.2013
Сообщений: 524
14.12.2013, 19:36 #7
_Лето_, у меня немного неправильно. нужно еще добавить сортировку массива

Добавлено через 37 секунд
добавить до цикла for()
0
ValeryS
Модератор
7006 / 5344 / 527
Регистрация: 14.02.2011
Сообщений: 18,037
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-ов просто сравни
0
14.12.2013, 20:20
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.12.2013, 20:20
Привет! Вот еще темы с ответами:

Разложить число в массив так, чтобы элементами была последовательность с единицы о этого числа - C++
как разложить число и записать в массив....например дано 4 4= 4 3 2 1 в масив записать 4 3 2 1

Гипотеза Гольдбаха: найти два таких простых числа, чтобы их сумма была равна заданному - C++
Гипотеза Гольдбаха заключается в том, что всякое четное число большее 2х можно представить в виде суммы двух простых чисел. По заданному...

Отсортировать строки массива так, чтобы первой шла строка, сумма элементов которой была меньше, чем остальных - C++
Добрый день, помогите, пожалуйста найти ошибку. Нужно создать двумерный массив, размером 5 х 7 (пять строк, семь столбцов). Заполнить...

Сгенерировать два случайных числа так, чтобы первое было больше второго - C++
Приветствую, как реализовать создание двух рандомных чисел, чтобы первое число было обязательно больше второго? вот мой код #include...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru