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

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

Войти
Регистрация
Восстановить пароль
 
so1o
33 / 33 / 2
Регистрация: 16.11.2009
Сообщений: 206
#1

легкий массив - C++

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

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

я понял алгоритм решения, я это понимаю так:
найти такой индекс, так чтобы разность суммы элементов до и после него, по модулю был наименьшим.
только не могу решить...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.05.2010, 19:03
Я подобрал для вас темы с готовыми решениями и ответами на вопрос легкий массив (C++):

Легкий код - C++
В чем ошибка? #include <iostream> #include <conio.h> #include <math.h> using namespace std; int main (void) int a,b; cout...

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

Ищу легкий линкер - C++
Здравствуйте. Задача такая: человеку на рабочем месте нужна простенькая консольная программа. Функционал - ввод/вывод в консоль,...

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

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

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

4
Aye Aye
370 / 284 / 36
Регистрация: 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
Hell Knight
230 / 60 / 3
Регистрация: 11.03.2010
Сообщений: 290
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
so1o
33 / 33 / 2
Регистрация: 16.11.2009
Сообщений: 206
04.05.2010, 15:28  [ТС] #4
всем спасибо)) вечером отпишусь о результатах)
0
Aye Aye
370 / 284 / 36
Регистрация: 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
04.05.2010, 21:40
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.05.2010, 21:40
Привет! Вот еще темы с ответами:

"Легкий" компилятор C++ без багов и без Net FrameWork бинарников под Windows - C++
Какой компилятор посоветуете? (C++) Сейчас мой проект в VisualStudio 2008. Компилирую в среде Windows 7 64, соответственно компилятор...

Ввести массив А. В массив В перенести все элементы массива А, стоящие правее максимального элемента, и имеющие нечетный индекс. Массив В отсортировать - C++
Добрый Вечер! Написал первую часть программы по этому заданию&quot;Ввести массив А. В массив В перенести все элементы массива А, стоящие правее...

Массив: Как скопировать двумерный массив в другой массив? - C++
Как скопировать двумерный массив в другой массив?

Легкий запрос - SQL Server
ЧТо не так??? и как это реализовать SELECT Название FROM dbo.Каталог Where ФИО = and and


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

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

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