0 / 0 / 0
Регистрация: 01.06.2017
Сообщений: 132
1

Преобразовать массив: сумма элементов первой половины должна быть как можно ближе к сумме элементов второй половины

04.11.2018, 13:32. Показов 2797. Ответов 6

Author24 — интернет-сервис помощи студентам
Преобразуйте одномерный массив таким образом,чтобы сумма элементов в его первой половине была бы как можно ближе к сумме элементов его второй половины. Исходный и преобразованный массивы выведите на экран.
Вот код:
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>
#include <ctime>
#include <algorithm>
#include <math.h>
#include <vector>
#include <functional>
 
using namespace std;
typedef vector<int>::iterator vecIt;
int main()
{
        srand(time(NULL));
        setlocale(LC_ALL,"rus");
        int n = 0;
        cout<<"Введите количество элементов массива:"<<endl;
        cin>>n;
        vector<int> mas(n);
        for (int i = 0; i < n; i++)
       {
            mas[i] = rand() % 100;
            cout << mas[i] << " "; 
        }
        cout<<endl;
        sort(mas.begin(),mas.begin()+n/2,less<int>());
        sort(mas.begin()+n/2,mas.end(),greater<int>());
        for (int i = 0; i < n; i++)
       {
           cout << mas[i] << " ";
        }
        return 0;
}
Проблема в том, можно ли сократить до минимума код и вообще он соответствует заданию??
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
04.11.2018, 13:32
Ответы с готовыми решениями:

Вычислить, на сколько сумма элементов первой половины массива отличается от суммы элементов второй половины массива
Составить программу, которая заполняет целочисленный массив размерностью 20 случайными числами в...

Заменить отрицательные элементы второй половины массива на количество положительных элементов первой половины массива
Напишите программу, которая в одномерном массиве заменяет все отрицательные элементы второй...

Найти минимум среди элементов первой половины массива и максимум среди второй половины
Ввести одномерный массив А , вывести его. Найти минимум среди элементов первой половины массива и...

Найти количество n-значных цифр, у которых сумма первой половины равна сумме второй
Добрый вечер , пожалуйста, помогите реализовать такое Посчитать количество n-значных цифр, у...

6
7785 / 6553 / 2983
Регистрация: 14.04.2014
Сообщений: 28,617
04.11.2018, 13:44 2
Ты же просто сортируешь половины. Сумма от этого не меняется.
0
Модератор
Эксперт С++
13498 / 10752 / 6407
Регистрация: 18.12.2011
Сообщений: 28,692
04.11.2018, 13:46 3
Отсортируйте массив целиком,
а потом в цикле поменяйте элементы с нечетными индексами первой половины и элементы с нечетными индексами второй половины.
0
0 / 0 / 0
Регистрация: 01.06.2017
Сообщений: 132
04.11.2018, 13:50  [ТС] 4
А как тогда приблизить одну половину суммы к другой, чтоб было почти равно хотя бы и без vector?
Я новичок в этом деле, на примере бы показать
0
Модератор
Эксперт С++
13498 / 10752 / 6407
Регистрация: 18.12.2011
Сообщений: 28,692
04.11.2018, 14:01 5
Я же написал, как:
C++
1
2
3
4
sort(mas.begin(),mas.end());
int n=mas.size();
for(int i=1;i<n/2;i+=2)
   swap(mas[i],mas[n/2+i]);
1
0 / 0 / 0
Регистрация: 01.06.2017
Сообщений: 132
04.11.2018, 14:12  [ТС] 6
Так правильно?

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
#include <iostream>
#include <ctime>
#include <algorithm>
#include <math.h>
#include <vector>
#include <functional>
 
using namespace std;
typedef vector<int>::iterator vecIt;
int main()
{
        srand(time(NULL));
        setlocale(LC_ALL,"rus");
        int n = 0;
        cout<<"Введите количество элементов массива:"<<endl;
        cin>>n;
        vector<int> mas(n);
        for (int i = 0; i < n; i++)
       {
            mas[i] = rand() % 100;
            cout << mas[i] << " "; 
        }
        cout<<endl;
{
       sort(mas.begin(),mas.end());
int n=mas.size();
for(int i=1;i<n/2;i+=2)
   swap(mas[i],mas[n/2+i]);}
       {
           cout << mas[i] << " ";
        }
        return 0;
}
0
Модератор
Эксперт С++
13498 / 10752 / 6407
Регистрация: 18.12.2011
Сообщений: 28,692
04.11.2018, 15:03 7
Лучший ответ Сообщение было отмечено Cybbber27 как решение

Решение

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
#include <iostream>
#include <ctime>
#include <algorithm>
#include <cstdlib>
#include <vector>
//#include <functional>
 
using namespace std;
int main()
{
        srand(time(NULL));
        setlocale(LC_ALL,"rus");
        int n = 0;
        cout<<"Введите количество элементов массива:"<<endl;
        cin>>n;
        vector<int> mas;
        for (int i = 0; i < n; i++)
        {
            mas.push_back(rand() % 100);
            cout << mas[i] << " "; 
        }
        cout<<endl;
        sort(mas.begin(),mas.end());
        n=mas.size();
        for(int i=1;i<n/2;i+=2)
            swap(mas[i],mas[n/2+i]);
        for(auto x:mas)
        {
           cout << x << " ";
        }
         cout<<endl;
        return 0;
}
1
04.11.2018, 15:03
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
04.11.2018, 15:03
Помогаю со студенческими работами здесь

Сравнить сумму элементов первой половины массива (С1) и второй половины массива (С2)
Помогите с решением: В массиве 24 элемента. Сравнить сумму элементов первой половины массива...

Найти максимум среди элементов первой половины массива и минимум среди второй половины массива, которые поменять местами
Люди... Как составить прогу для PascalABC? Не могу разбить массив на две половины... Ввести...

Поменять местами элементы первой половины массива с элементами второй половины
Сформировать массив А из 20 случайных целых чисел в диапазоне от минус 30 до 30. Напечатать его....

Верно ли, что запись первой половины числа равна записи его второй половины.
Создать программу: Если &quot;первая половина числа&quot; равна &quot;второй половине числа&quot;, то writeln('Да'),...


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

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

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