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

Найти непрерывный участок из 10 элементов, сумма которых максимальна - C++

Восстановить пароль Регистрация
 
AlexeySlavin
0 / 0 / 0
Регистрация: 10.01.2013
Сообщений: 17
19.01.2013, 13:27     Найти непрерывный участок из 10 элементов, сумма которых максимальна #1
Найти непрерывный участок из 10 элементов, сумма которых максимальна. Если размерность массива 200, а диапазон значений от 0 до 100.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.01.2013, 13:27     Найти непрерывный участок из 10 элементов, сумма которых максимальна
Посмотрите здесь:

В двумерном массиве A[N][M] поменять местами строки,в которых сумма элементов максимальна и минимальна. C++
C++ Найти порядковые номера двух соседних чисел, сумма которых максимальна.
найти в массиве непрерывный участок из 10 чисел с наибольшим средним значением C++
Найти непрерывный участок C++
Найти непрерывный участок из 10 элементов, который имеет наибольшее среднее значение элементов C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
valeriikozlov
Эксперт C++
 Аватар для valeriikozlov
4660 / 2486 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
19.01.2013, 16:16     Найти непрерывный участок из 10 элементов, сумма которых максимальна #2
Если массив a[] размером 200 уже есть, то можно так вывести непрерывный участок из 10 элементов, сумма которых максимальна:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
int s=0, tmp=0, i_max=0, i, j;
for(i=0; i<10; i++)
    s+=a[i];
tmp=s;
for(i=1; i<191; i++)
{
    tmp+=a[i+9]-a[i-1];
    if(tmp>s)
    {
        s=tmp;
        i_max=i;
    }
}
cout<<"Res:"<<endl;
for(i=0; i<10; i++)
    cout<<a[i_max+i]<<" ";
AlexeySlavin
0 / 0 / 0
Регистрация: 10.01.2013
Сообщений: 17
21.01.2013, 17:32  [ТС]     Найти непрерывный участок из 10 элементов, сумма которых максимальна #3
объясните как Вы это сделали?
valeriikozlov
Эксперт C++
 Аватар для valeriikozlov
4660 / 2486 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
21.01.2013, 19:09     Найти непрерывный участок из 10 элементов, сумма которых максимальна #4
Цитата Сообщение от AlexeySlavin Посмотреть сообщение
объясните как Вы это сделали?
см комментарии:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
int s=0, tmp=0, i_max=0, i, j;// i_max=0 - считаем что наибольшая сумма начинается с элемента с индексом 0
for(i=0; i<10; i++)// суммируем первые 10 элементов
    s+=a[i];// по окончании этого цикла в переменной s сумма первых 10 элементов (считаем пока ее наибольшей возможной суммой)
tmp=s;// в переменную tmp записываем значение суммы первых 10 элементов
for(i=1; i<191; i++)
{
    tmp+=a[i+9]-a[i-1];// для нахождения очередной суммы отнимаем левый элемент (относительно очередной 10-ки элементов) и прибавляем правый элемент
    if(tmp>s)// если очередная сумма больше значения записанного в s
    {
        s=tmp;// меняем значение в переменной s
        i_max=i;// записываем новый индекс в переменную i_max
    }
}
cout<<"Res:"<<endl;
for(i=0; i<10; i++)// выводим 10 элементов с максимальной суммой
    cout<<a[i_max+i]<<" ";
MickeyBlueEyes
Студент
 Аватар для MickeyBlueEyes
120 / 131 / 12
Регистрация: 07.04.2011
Сообщений: 503
21.01.2013, 20:37     Найти непрерывный участок из 10 элементов, сумма которых максимальна #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 "stdafx.h"
#include<iostream>
#include <time.h>
using namespace std;
 
void main(int argc, char ** argv){
 
    const int size = 200;
 
    int arr[size] = {0};
 
    int max_o = 0, max_f = 0, index_in = 0;
 
    //Забъём случайными числами массив  
    srand(time(NULL));
    for(int i = 0; i < size; i++){
        arr[i] = rand() % 100;
    }
 
    for(int i = 0; i < size; i++){
        if(i % 10 == 0){
            if(max_f > max_o){
                max_o = max_f;
                index_in = i - 10;
            }
            max_f = 0;
        } else {
            max_f += arr[i];
        }
    }
    
    cout << "start index = " << index_in << endl;
 
    cout << "[";
    for(int i = 0; i < 10; i++){
        cout << arr[index_in + i];          
        if(i == 9){
            cout << "]";
        } else {
            cout << ", ";
        }
    }
 
    getchar();
    getchar();
    
 
}
valeriikozlov
Эксперт C++
 Аватар для valeriikozlov
4660 / 2486 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
21.01.2013, 21:19     Найти непрерывный участок из 10 элементов, сумма которых максимальна #6
MickeyBlueEyes, если коротко об ошибках, то так:
- вообще не учитываются значения элементов с индексами кратными 10;
- рассматриваются суммы элементов таким образом: сумма элементов с индексами 1-9, сумма элементов с индексами 11-19, сумма элементов с индексами 21-29, и т.д (т.е. суммы 9-ти элементов, а не 10-ти). А нужно рассматривать так: сумма элементов с индексами 0-9, сумма элементов с индексами 1-10, сумма элементов с индексами 2-11, и т.д.
Yandex
Объявления
21.01.2013, 21:19     Найти непрерывный участок из 10 элементов, сумма которых максимальна
Ответ Создать тему
Опции темы

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