Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/3: Рейтинг темы: голосов - 3, средняя оценка - 5.00
33 / 33 / 5
Регистрация: 16.11.2009
Сообщений: 207
1

легкий массив

03.05.2010, 19:03. Просмотров 585. Ответов 4
Метки нет (Все метки)

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

я понял алгоритм решения, я это понимаю так:
найти такой индекс, так чтобы разность суммы элементов до и после него, по модулю был наименьшим.
только не могу решить...
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
03.05.2010, 19:03
Ответы с готовыми решениями:

Лёгкий вопрос...
Подскажите пожалуйста, как ограничить количество знаков после запятой в С++? Например ...

легкий алгоритм
нужно составить алгоритм на С. С клавиатуры ввести число.Определить, сколько раз оно делится на 2.

Легкий код
В чем ошибка? #include <iostream> #include <conio.h> #include <math.h> using namespace std; ...

Ищу легкий линкер
Здравствуйте. Задача такая: человеку на рабочем месте нужна простенькая консольная программа....

4
372 / 286 / 97
Регистрация: 17.12.2009
Сообщений: 567
03.05.2010, 20:24 2
алгоритм, по простому:
сделай еще 2 переменнх max и j, в одной как бы найденный индекс в другой разность сумм до и после искомого.
потом проходим по массиву. для каждого элемента вычисляя сумму до и после и сверяем её с max, если она меньше max то запоминаем её в max и текущий индекс запоминаем в j.

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
#include <iostream>
using namespace std;
int main()
{
    srand(time(0));
    int n=5, // количество элементов
    max,     // в этой переменной хранится разность сумм
    j=0,     // индекс искомого элемента
    sumbefor=0, // сумма до текущего
    sumafter=0, // сумма после текущего
    m[n];   // сам массив
    // заполним и распечатаем массив
    for (int i=0;i<n;i++)
    {
        m[i]=rand()%10;
        cout << m[i] << ' ';
    }
    cout << '\n';
 
    // посчитаем сумму после элемента
    for (int i=0;i<n;i++) sumafter+=m[i];
 
    max=abs(sumbefor-sumafter);
    for (int i=0; i<n;i++)
    {
        if (i>0) sumbefor+=m[i-1]; // вычислим сумму до текущего элемента
        sumafter-=m[i];            // высилить мумму после текущего
        if (abs(sumbefor-sumafter) < max)
        {
            max=abs(sumbefor-sumafter);
            j=i;
        }
        // выводим на экран то что у нас в цикле произошло
        cout << "befor=" << sumbefor << " m[" << i << "]=" << m[i] << " after=" << sumafter << " diff is "
             << abs(sumbefor-sumafter) << '\n';
    }
    cout << j; //это индекс того самого элемента
    return 0;
}
1
230 / 60 / 17
Регистрация: 11.03.2010
Сообщений: 294
03.05.2010, 20:43 3
только там плохой рандом)))
его лучше заменить на ручной))

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
#include <iostream>
 
using namespace std;
 
#define MAX 20
 
int sum_right(int * arr)
{
    int g = 0;
    int result = 0;
    while (*(arr + g)!=-1)
    {
        result += *(arr + g);
        g++;
    }
    return result;
}
 
int main()
{
    int a[MAX + 1];
    a[MAX] = -1;
    int eps;
    cout << "Enter pogrehnost: ";
    cin >> eps;
    for (int i = 0; i<MAX; i++)a[i] = rand()%99;
    int sum = NULL;
    for (int i = 0; i<MAX; i++)
    {
        sum += a[i];
        if (abs(sum - sum_right(&a[i])) <= eps)
            cout << "Tot samiy: " << i << "\n";
    }
    system("pause");
    return 0;
}
1
33 / 33 / 5
Регистрация: 16.11.2009
Сообщений: 207
04.05.2010, 15:28  [ТС] 4
всем спасибо)) вечером отпишусь о результатах)
0
372 / 286 / 97
Регистрация: 17.12.2009
Сообщений: 567
04.05.2010, 21:40 5
Hell Knight, генератор случайнх чисел не инициализирован, плохо: int sum = NULL; - есть машины с архитектурой, где нулевой узатель это не 0, NULL - нулевой указатель во всех архитектурах, может не быть равным 0. ТУТ: int a[MAX + 1]; a[MAX] = -1; нехорошо делать -1 в качестве терминального символа, такое можно считать издержкой проектирования. sum += a[i]; - так посчитается не мумма элеменов до i-ого, а сумма всех до i-ого и сам i-ый, функция sum_right считает сумму точно так же, вместе с i-ым - не правильно. abs(sum - sum_right(&a[i]) надо нйти элемент для которого соответствующие суммы минимально отличающиеся друг от друга, а не суммы оиличающиеся на пренебрежимо малую величину, так задача не решена. so1o, используй мой вариант.
П.С. Рандом нормальный, только нужна инициализация генератора псевдослучайных чисел текущим временем.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
04.05.2010, 21:40

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

Легкий пример про структуры
Задача заключается в том чтобы присвоить значения переменной х и всем объектам к которым она имеет...

Подскажите легкий GUI для C++
Привет, уже второй день ищу легкую библиотеку для GUI, но ни как не могу найти что нибудь...

Есть лёгкий способ отсортировать?
Вобщем есть 3 вектора одинаковой размерности. Нужно отсортировать первый вектор, а остальные два...

Нужно вывести все буквы, которые встречаются в ней , и их количество , легкий код только сделайте плз
Пример Input zazbazy output ...

Memo легкий вопросег
Легкий наверно вопрос, но чет я никак не придумаю: У нас есть мемо, вот мы выделили его и нажали...

Очень лёгкий вопрос
Здравствуйте , у меня небольшой вопрос: Я создал компонент RadioGroup , заполнил именами Itemsы, и...


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

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

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