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

консольные приложения - C++

Восстановить пароль Регистрация
 
CyBer_UA
0 / 0 / 0
Регистрация: 02.02.2012
Сообщений: 30
02.02.2012, 22:50     консольные приложения #1
вообщем задание не сложное но я его немогу просто понять=(
мне не надо писать код или решение помогите просто его понять:
Найти непрерывный участок из 10 элементов, сумма которых максимальная
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.02.2012, 22:50     консольные приложения
Посмотрите здесь:

Вопрос про консольные приложения C++
Консольные пятнашки C++
C++ консольные игры
многопотоковые консольные приложения C++
Консольные команды C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
NoMasters
Псевдослучайный
1737 / 1080 / 69
Регистрация: 13.09.2011
Сообщений: 3,093
02.02.2012, 22:53     консольные приложения #2
Найти десять таких последовательных элементов в массиве, чтобы сумма их была максимальна.
CyBer_UA
0 / 0 / 0
Регистрация: 02.02.2012
Сообщений: 30
02.02.2012, 22:57  [ТС]     консольные приложения #3
типо чтоб при слаживание 10 чисел их сумма больше суммы других?
в масиве 100 чисел
soon
 Аватар для soon
2536 / 1301 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
02.02.2012, 23:03     консольные приложения #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
32
33
34
#include <iostream>
#include <algorithm>
#include <iomanip>
 
int main()
{
    std::srand(std::time(nullptr));
    const std::size_t size = 20;
    int arr[size];
    std::generate(arr, arr + size, [] { return std::rand() % 21; });
    for(const auto& it: arr)
        std::cout << std::setw(4) << it;
    std::cout << std::endl;
    int sum = 0;
    for(std::size_t i = 0; (i < 10) && (i < 10); ++i)
        sum += arr[i];
    int sumMax = sum;
    std::size_t posFirst = 0, posLast = 10;
    //std::cout << "sum between 0 and 10 = " << sum << std::endl;
    for(std::size_t i = 10; i < size; ++i)
    {
        sum += arr[i];
        sum -= arr[i - 10];
        if(sum > sumMax)
        {
            sumMax = sum;
            posFirst = i - 9;
            posLast = i + 1;
        }
        //std::cout << "sum between " << i - 9 << " and " << i + 1<< " = " << sum << std::endl;
    }
    std::cout << "max sum between " << posFirst << " and " << posLast << " = " << sumMax << std::endl;
    return 0;
}
http://liveworkspace.org/code/4bedd1...260077c4d58638
CyBer_UA
0 / 0 / 0
Регистрация: 02.02.2012
Сообщений: 30
02.02.2012, 23:10  [ТС]     консольные приложения #5
Цитата Сообщение от soon Посмотреть сообщение
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
#include <iostream>
#include <algorithm>
#include <iomanip>
 
int main()
{
    std::srand(std::time(nullptr));
    const std::size_t size = 20;
    int arr[size];
    std::generate(arr, arr + size, [] { return std::rand() % 21; });
    for(const auto& it: arr)
        std::cout << std::setw(4) << it;
    std::cout << std::endl;
    int sum = 0;
    for(std::size_t i = 0; (i < 10) && (i < 10); ++i)
        sum += arr[i];
    int sumMax = sum;
    std::size_t posFirst = 0, posLast = 10;
    //std::cout << "sum between 0 and 10 = " << sum << std::endl;
    for(std::size_t i = 10; i < size; ++i)
    {
        sum += arr[i];
        sum -= arr[i - 10];
        if(sum > sumMax)
        {
            sumMax = sum;
            posFirst = i - 9;
            posLast = i + 1;
        }
        //std::cout << "sum between " << i - 9 << " and " << i + 1<< " = " << sum << std::endl;
    }
    std::cout << "max sum between " << posFirst << " and " << posLast << " = " << sumMax << std::endl;
    return 0;
}
http://liveworkspace.org/code/4bedd1...260077c4d58638
спс но ксожеленью не все тут понятно=(
Апдейт : если не тяжело моежете расказать принцып ее работы?
soon
 Аватар для soon
2536 / 1301 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
02.02.2012, 23:20     консольные приложения #6
CyBer_UA, все очень просто. Изначально считаем сумму первых 10 элементов. Заводим переменную для максимальной суммы, а так же для первого и последнего элемента. Затем идем по массиву до последнего элемента, прибавляя текущий элемент к сумме и вычитая (текущий - 10). Если данная сумма больше максимальной, то запоминаем промежуток и максимальную сумму.
Корректно отработает при количестве элементов >= 10. Если их меньше, то потребуются некоторые косметические правки.
CyBer_UA
0 / 0 / 0
Регистрация: 02.02.2012
Сообщений: 30
02.02.2012, 23:34  [ТС]     консольные приложения #7
а если в масиве больше чисел допустим 200 то сумму первых 20 элементов?

Добавлено через 4 минуты
смотрите создал такой массив
C++
1
2
3
4
5
6
7
8
int ar[200];
int sum;
for(int i=0;i<200;i++){
ar[i]=random(100);
sum+=ar[i];
cout<<ar[i]<<" ";
 
}
сумма допустим 4792 как сумма 10 елементов может быть больше общей?
soon
 Аватар для soon
2536 / 1301 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
02.02.2012, 23:38     консольные приложения #8
Цитата Сообщение от CyBer_UA Посмотреть сообщение
а если в масиве больше чисел допустим 200 то сумму первых 20 элементов?
Сказано 10, откуда вы 20 взяли?

Цитата Сообщение от CyBer_UA Посмотреть сообщение
умма допустим 4792 как сумма 10 елементов может быть больше общей?
сумма непрерывного участка из 10 элементов, при чем тут общая?
CyBer_UA
0 / 0 / 0
Регистрация: 02.02.2012
Сообщений: 30
02.02.2012, 23:48  [ТС]     консольные приложения #9
П.с сори что туплю,просто тяжелавато дается это задание=(
Веб языки даются проще
буду разбиратся!

Добавлено через 1 минуту
а под максимальной суммой имеется ввиду сумма первых 10 элементов?
soon
 Аватар для soon
2536 / 1301 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
02.02.2012, 23:54     консольные приложения #10
а под максимальной суммой имеется ввиду сумма первых 10 элементов?
Она инициализируется суммой первых элементов, но вообще под ней подразумевается максимальная сумма 10 элементов.
CyBer_UA
0 / 0 / 0
Регистрация: 02.02.2012
Сообщений: 30
03.02.2012, 00:06  [ТС]     консольные приложения #11
апдейт :все что удалено понял что не прокатит=)

Добавлено через 3 минуты
for(std::size_t i = 0; (i < 10) && (i < 10); ++i)
еще вопрос эта строчка читается :
условие верно пока i меньше 10 и i меньши 10,а почему нельзя написать i < 10
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
03.02.2012, 10:35     консольные приложения #12
soon, А почему не использовать accumulate?
Автор, можно. Это будет одно и тоже.
soon
 Аватар для soon
2536 / 1301 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
03.02.2012, 13:08     консольные приложения #13
for(std::size_t i = 0; (i < 10) && (i < 10); ++i)
Вот это я отжог. По задумке там должно быть одно из условий i < size. Так, на всякий случай.

soon, А почему не использовать accumulate?
А шут его знает, почему я в циклы полез. Время позднее уже было.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.02.2012, 16:16     консольные приложения
Еще ссылки по теме:

C++ C++ Консольные программы
Битовые операции. Консольные формулы C++
C++ Диалог с пользователем. Консольные команды

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

Или воспользуйтесь поиском по форуму:
CyBer_UA
0 / 0 / 0
Регистрация: 02.02.2012
Сообщений: 30
03.02.2012, 16:16  [ТС]     консольные приложения #14
пытался сам сделать
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
#include<time.h>
#include<stdio.h>
#include<iostream.h>
#include <stdlib.h>
#include <conio.h>
#pragma argsused
int main(){
int ar[200];
int sum=0;
int sum1,position,g=0;
for(int i=0;i<200;i++){
ar[i]=random(100);
//sum+=ar[i];
cout<<ar[i]<<" ";
 
g++;
//cout<<"g=" <<g<<"\n";
if(g==9){g=0;sum1=0;}
sum1+=ar[i];
if(i==9){sum=sum1;}
if(sum1>sum ){
sum=sum1;
position=i;
 
}
 
}
cout<<"sum=" <<sum<<"\n"; cout<<"position="<<position-9<<"\n";
for(int k=(position-9);k<(position);k++){
cout<<ar[k]<<" ";
}
        return 0;
        getch();
        }
но чет не коректно пашет
Yandex
Объявления
03.02.2012, 16:16     консольные приложения
Ответ Создать тему
Опции темы

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