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

сумма соседних членов последовательности - C++

Восстановить пароль Регистрация
 
nikola_omsk
3 / 3 / 0
Регистрация: 27.05.2011
Сообщений: 73
27.09.2011, 07:54     сумма соседних членов последовательности #1
Даны числа а1, а2, a(n) Известно, что а1>0 и что среди а2, а3, a(n) есть хотя бы одно отрицательное число. Пусть а1, a2, an - члены данной последовательности, предшествующие первому отрицательному члену (n заранее не известно). Найти min(a1+a2,a2+a3,a(n-1)+a(n)). Без использования массивов. Прошу помощи.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.09.2011, 07:54     сумма соседних членов последовательности
Посмотрите здесь:

C++ C++ сумма членов последовательности
C++ 4. Найти сумму К членов последовательности: 3, 7, 11, 15,… Вычислить сумму членов последовательности 1, 4, 7, 10, …, не превосходящих числа К
C++ Получить число отрицательных членов последовательности и сумму нулевых членов последовательности
Сумма членов последовательности C++
C++ Сумма первых членов последовательности
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Aneron
 Аватар для Aneron
157 / 156 / 12
Регистрация: 20.04.2010
Сообщений: 570
27.09.2011, 09:23     сумма соседних членов последовательности #2
C++
1
2
3
4
int a[n];//Твои числа.
int min = 0;
for(int i = 0; i < n-1; ++i)
min = min(a[i],a[i+1])
-=ЮрА=-
Заблокирован
Автор FAQ
27.09.2011, 09:55     сумма соседних членов последовательности #3
Цитата Сообщение от nikola_omsk Посмотреть сообщение
Без использования массивов. Прошу помощи.
- нужно всего лишь организовать пробор элементов последовательности до 1-го отрицательного.
В самом начале делаем инициализацию min = а1,а далее по программе проверяем выполнение проверку min < ai - если истина переинициализируем min
C
1
2
if(val < min)
    min = val;
Накидал простенький проектик на Си, работает так - вводим число элементов n последовательности и генерируем и выводим на экран случайные числа (аi- члены последовательности) до момента появления 1-го отрицательного. Если отрицательный элемент не встретится то сгенерируются все n элементов
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
49
50
51
52
53
54
55
56
57
58
59
#include <stdlib.h>
#include <stdio.h>
#include <ctype.h>
#include <conio.h>
#include <math.h>
#include <time.h>
 
//Генерация случ числа по модулю меньшем чем MaxModule
int GenRandNum(int MaxModule)
{
    int ret = rand()%MaxModule;
    //Генерируем минус
    if(ret % 25 == 0)
        ret *= -1;
    while(ret < -MaxModule || MaxModule < ret)
    {
        ret = rand()%MaxModule;
        //Генерируем минус
        if(ret % 25 == 0)
            ret *= -1;
    }
    return ret;
}
 
int main()
{
    int val,i,n,min;
    do
    {
        srand(time(NULL));//это позволит избежать повторения случ чисел от итерации к итерации
        printf("Enter num elements in sequence : ");
        scanf("%d",&n);
        printf("\tGenerated sequence\r\n");
        if((val = GenRandNum(100)) < 0)
            printf("an < 0, generation stoped\r\n");
        else
        {
            printf("a%02d = %d\r\n",1, val);
            min = val;//Первоначальная инициализация мин эл-та
            for(i = 1; i < n; i++)
            {
                val = GenRandNum(100);
                if(val < 0)
                {
                    printf("an < 0, generation stoped\r\n");
                    break;
                }
                if(val < min)
                    min = val;
                printf("a%02d = %d\r\n",i + 1, val);
            }
            printf("min element : %d\r\n",min);
        }
        printf("Press Y to new input\r\n");
        
    }
    while(toupper(getch()) == 'Y');
    return 0;
}
Результат работы
Enter num elements in sequence : 16
Generated sequence
a01 = 10
a02 = 97
a03 = 47
an < 0, generation stoped
min element : 10
Press Y to new input
kravam
быдлокодер
 Аватар для kravam
1512 / 872 / 44
Регистрация: 04.06.2008
Сообщений: 5,271
27.09.2011, 11:42     сумма соседних членов последовательности #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
Enter num elements in sequence : 20
        Generated sequence
a01 = 61
a02 = 92
a03 = 39
a04 = 85
a05 = 69
a06 = 37
a07 = 33
a08 = 70
a09 = 4
a10 = 65
a11 = 36
a12 = 68
a13 = 6
a14 = 83
a15 = 47
a16 = 35
a17 = 19
a18 = 43
a19 = 14
a20 = 12
min element : 4
Press Y to new input
минимальный элемент надо искать среди следующих сумм:
61+ 92, 92+ 39, 39+ 85, 85+ 69 и так далее
-=ЮрА=-
Заблокирован
Автор FAQ
27.09.2011, 12:43     сумма соседних членов последовательности #5
Цитата Сообщение от kravam Посмотреть сообщение
минимальный элемент надо искать среди следующих сумм:
61+ 92, 92+ 39, 39+ 85, 85+ 69 и так далее
Ну да тут сумма соседних чисел точно в голову влезло min(a1,a2,...an) сейчас поправлюсь

Добавлено через 24 минуты
Вот поправился(вообще же мне не нравиться что числа генерировать приходиться сейчас переделаю программму под последовательность содержащуюся в файле)
Код Си
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
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
#include <stdlib.h>
#include <stdio.h>
#include <ctype.h>
#include <conio.h>
#include <math.h>
#include <time.h>
 
//Генерация случ числа по модулю меньшем чем MaxModule
int GenRandNum(int MaxModule)
{
    int ret = rand()%MaxModule;
    //Генерируем ранд минус
    ret *= int(pow(-1,rand()%(MaxModule*10)));
    while(ret < -MaxModule || MaxModule < ret)
    {
        ret = rand()%MaxModule;
        //Генерируем ранд минус
        ret *= int(pow(-1,rand()%(MaxModule*10)));
    }
    return ret;
}
 
int main()
{
    int ai,ai1,i,n,min;
    do
    {
        srand(time(NULL));//это позволит избежать повторения случ чисел от итерации к итерации
        printf("Enter num elements in sequence : ");
        scanf("%d",&n);
        printf("\tGenerated sequence\r\n"); 
        if((ai = GenRandNum(100)) < 0)
            printf("ai < 0, generation stoped\r\n");
        else
        {
            printf("a%02d = %d\r\n",1, ai);
            if((ai1 = GenRandNum(100)) < 0)
                printf("ai1 < 0, generation stoped\r\n");
            else
            {
                printf("a%02d = %d\r\n",2, ai1);
                min = ai + ai1;
                for(i = 2; i < n - 1; i++)
                {
                    if((ai = GenRandNum(100)) < 0)
                    {
                        printf("ai < 0, generation stoped\r\n");
                        break;
                    }
                    else
                    {
                        printf("a%02d = %d\r\n",i, ai);
                        if((ai1 = GenRandNum(100)) < 0)
                        {
                            printf("ai1 < 0, generation stoped\r\n");
                            break;
                        }
                        else
                        {
                            printf("a%02d = %d\r\n",(i++), ai1);
                            if(ai + ai1 < min)
                                min = ai + ai1;
                        }
                    }
                }
                printf("min sum: %d\r\n",min);
            }
        }
        printf("Press Y to new input\r\n");
        
    }
    while(toupper(getch()) == 'Y');
    return 0;
}

Enter num elements in sequence : 25
Generated sequence
a01 = 80
a02 = 39
a02 = 28
a02 = 7
a04 = 11
ai1 < 0, generation stoped
min sum: 35
Press Y to new input

Добавлено через 31 минуту
С++ реалиация
Цитата Сообщение от nikola_omsk Посмотреть сообщение
Даны числа а1, а2, a(n) Известно, что а1>0 и что среди а2, а3, a(n) есть хотя бы одно отрицательное число. Пусть а1, a2, an - члены данной последовательности, предшествующие первому отрицательному члену (n заранее не известно). Найти min(a1+a2,a2+a3,a(n-1)+a(n)). Без использования массивов. Прошу помощи.
Последовательность находиться в файле данных data.txt
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
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
#include <iostream>
#include <fstream>
#include <conio.h>
 
using namespace std;
 
int main()
{
    int ai,ai1,i,min;
    ifstream ifs;
    do
    {
        std::cout<<"\tInput sequence\r\n";
        ifs.open("data.txt",ios::out);
        if(!ifs)
            std::cout<<"Can't open data.txt\r\n";
        else
        {
            ifs>>ai;
            std::cout<<"a1 = "<<ai<<"\r\n";
            if(ai < 0)
                std::cout<<"a1 < 0 algorithm stoped\r\n";
            else
            if(!ifs.eof())
            {
                ifs>>ai1;
                std::cout<<"a2 = "<<ai1<<"\r\n";
                if(ai1 < 0)
                    std::cout<<"a2 < 0 algorithm stoped\r\n";
                else
                {
                    i = 3;
                    min = ai + ai1;
                    while(!ifs.eof())
                    {
                        ifs>>ai;
                        std::cout<<"a"<<i<<" = "<<ai<<"\r\n";
                        i++;
                        if(ai < 0)
                        {
                            std::cout<<"a"<<i<<" < 0 algorithm stoped\r\n";
                            break;
                        }
                        else
                        if(!ifs.eof())
                        {
                            ifs>>ai1;
                            std::cout<<"a"<<i<<" = "<<ai1<<"\r\n";
                            if(ai1 < 0)
                            {
                                std::cout<<"a"<<i<<" < 0 algorithm stoped\r\n";
                                break;
                            }
                            if(ai + ai1 < min)
                                min = ai + ai1;
                        }
                    }
                }
            }
        }
        std::cout<<"min sum: "<<min<<"\r\n";
        std::cout<<"Press Y to new input\r\n";
    }
    while(toupper(getch()) == 'Y');
    return 0;
}
Input sequence
a1 = 1
продолжение
a2 = 5
a3 = 89
a4 = 643
a4 = 85
a5 = 14
a5 = 32
a6 = 0
a6 = 17
a7 = 256
a7 = 1024
a8 = 748

a8 = -13
a9 < 0 algorithm stoped
min sum: 6
Press Y to new input

data.txt
1 5 89 643 85 14 32 0 17 256 1024 748 -13 5 92 54 36
nikola_omsk
3 / 3 / 0
Регистрация: 27.05.2011
Сообщений: 73
27.09.2011, 14:03  [ТС]     сумма соседних членов последовательности #6
Спасибо огромное...еще вопрос..я пользуюсь CodeBlocks и у меня ошибки возникают во всем что относится к "#include <iostream>
#include <fstream>" ,"using namespace std" и тому подобное. в настройках стоит gnu gcc compiler. что нужно изменит в компиляторе-в варианте с файлом

Добавлено через 15 минут
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
while(toupper(getch()) == 'Y')
тут ошибку показывает, в варианте без файла

Добавлено через 6 минут
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
int ret = rand()%MaxModule;
* * * * //Генерируем ранд минус
* * * * ret *= int(pow(-1,rand()%(MaxModule*10)));
* * * * while(ret < -MaxModule || MaxModule < ret)
и здесь в int

Добавлено через 6 минут
лучший вариант это без файла...в чем проблема подскажите
-=ЮрА=-
Заблокирован
Автор FAQ
27.09.2011, 14:18     сумма соседних членов последовательности #7
nikola_omsk, я не работаю в CodeBlocks toupper - поднимает символ в верхний регистр, можешь попробовать без неё while(getch() == 'y')
nikola_omsk
3 / 3 / 0
Регистрация: 27.05.2011
Сообщений: 73
27.09.2011, 14:20  [ТС]     сумма соседних членов последовательности #8
Еще вопросик...а какую прогу поставить, а то в этой понты постояннно...заранее спасибо
kravam
быдлокодер
 Аватар для kravam
1512 / 872 / 44
Регистрация: 04.06.2008
Сообщений: 5,271
27.09.2011, 14:23     сумма соседних членов последовательности #9
Dev-Cpp 4.9.9.2 качай
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9373 / 5423 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
27.09.2011, 14:27     сумма соседних членов последовательности #10
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <stdio.h>
#include <limits.h>
#define SIZE 10
 
int main(void){
    int arr[SIZE] = { 2, 5, 7, 3, 4, 0, -1, 8, 9, 3 }, i, sum;
    
    sum = INT_MAX;
    for ( i = 1; i < SIZE && arr[i] >= 0; ++i ){
        int s = arr[i - 1] + arr[i];
        printf("%d + %d = %d\n", arr[i - 1], arr[i], s);
        if ( s < sum )
            sum = s;
    }
    if ( i == 1 )
        printf("Second element was negative, no sum calculated.\n");
    else
        printf("Minimum sum is %d\n", sum);
        
    return 0;
}
nikola_omsk
3 / 3 / 0
Регистрация: 27.05.2011
Сообщений: 73
27.09.2011, 18:01  [ТС]     сумма соседних членов последовательности #11
огромное спасибо...супер
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.10.2011, 13:30     сумма соседних членов последовательности
Еще ссылки по теме:

Не превышает ли сумма членов последовательности 50? C++
Сумма определенных членов последовательности C++
Чему равна минимальная сумма первых членов последовательности, превышающая некоторое заданное число R C++

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

Или воспользуйтесь поиском по форуму:
nikola_omsk
3 / 3 / 0
Регистрация: 27.05.2011
Сообщений: 73
25.10.2011, 13:30  [ТС]     сумма соседних членов последовательности #12
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
#include <stdlib.h>
#include <stdio.h>
#include <ctype.h>
#include <conio.h>
#include <math.h>
#include <time.h>
void main()
{
        int ai1,i,n,z,min;
 
                srand(time(NULL));
                printf("Enter num elements in sequence : ");
                scanf("%d",&n);
                printf("\tGenerated sequence\r\n");
                z = rand()%(100);
                printf("a%01d = %d\r\n",0, z);
 
                                    for(i = 1; i < n-1 ; i++)
                                {
                                        if((ai1 = rand()%(100)-10) < 0)
                                        {
                                                printf("ai < 0, generation stoped\r\n");
                                                break;
                                        }
                                        else
                                        {
                                            printf("a%01d = %d\r\n",i, ai1);
                                                        if(z + ai1 < min){
                                                        min = z + ai1;
                                                                         }
 
                                        }z=ai1;
                                }
                                printf("min sum: %d\r\n",min);
 
return 0;
}
Решил короче...
Yandex
Объявления
25.10.2011, 13:30     сумма соседних членов последовательности
Ответ Создать тему
Опции темы

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