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

Массивы(статические) - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Наверное синтаксическая ошибка http://www.cyberforum.ru/cpp-beginners/thread198244.html
Выдает ошибку Unit1.cpp(35): E2141 Declaration syntax error double funBendel (double A, double E, double S) { double f1 = pow(24/A,14); double e = exp(-0.18*pow(pow(18.0/A,0.5)*(E-A),0.5));...
C++ При отображении выборки из структуры отображаются артефакты Здравствуйте, уважаемые форумчане. Имеется программа на Си. Компилятор использую Dev-cpp. Вот сам проект Программа представляет из себя информационно-поисковую систему. При выборе пункта 5... http://www.cyberforum.ru/cpp-beginners/thread198231.html
C++ Объединить массивы
Даны два массива A и B размера m, элементы которых упорядочены по возрастанию. Объединить эти массивы так, чтобы результирующий массив остался упорядоченным. Добавлено через 14 минут P.S. При...
Найти значение 3-го по величине элемента и значения всех элементов массива, которые его превышают, заменить на найденное значение C++
Найти значение 3-го по величине элемента и значения всех элементов массива, которые его превышают, заменить на найденное значение Добавлено через 14 минут P.S. При выполнении работы используются...
C++ Добавить после элемента массива с заданным индексом элемент со значением 100 http://www.cyberforum.ru/cpp-beginners/thread198224.html
Удалить последний элемент равный 0. Добавить после элемента массива с заданным индексом элемент со значением 100. Добавлено через 15 минут P.S. При выполнении работы используются статические...
C++ BigInteger(c++) Здравствуйте!!! Помогите составить программу которая вычесляет сумму двух больших цифр (до 10^100 степени). Пробовал через unsigned long long ничего не получаилось... Пробовал через char но он вместо... подробнее

Показать сообщение отдельно
ne6u4u
12 / 12 / 0
Регистрация: 14.11.2010
Сообщений: 29
27.11.2010, 15:40
простестил тока на твоем примере, так что 100% результат не гарантирую)) но предложу свою версию решения (если будет две одинаковые последовательности по длине, то должна выводить ту, которая встречается раньше)

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
75
76
77
78
79
80
81
82
83
84
85
#include <iostream>
using namespace std;
 
int main()
{
    setlocale(LC_ALL,"Russian");
    int N;
    const int MAX = 1000;
    int arr[MAX], temp_arr[MAX];
    
    //Ввод массива
    cout << "Введите размерность массива: ";
    cin >> N;
    cout << "Заполните массив:\n";
    for (int i=0; i<N; i++)
    {
        cout << i+1 << " элемент: ";
        cin >> arr[i];
    }
 
    //создаю массив для отслеживания последовательносетей
    for (int i=0; i<N-1; i++)
    {
        if ((arr[i] - arr[i+1]) == 1)
            temp_arr[i] = -1;
        else if ((arr[i] - arr[i+1]) == -1)
            temp_arr[i] = 1;
        else
            temp_arr[i] = 0;
    }
 
 
    //вычисление наибольшей последовательности
    int index=0, delta=0, temp_ind=0, temp_del=0;
    if (temp_arr[0]==1 || temp_arr[0]==-1)
    {
        temp_ind = 0; temp_del = 1;
    }
    for (int i=1; i<N; i++)
    {
        if((temp_arr[i]==1 && temp_arr[i-1]==1) || ((temp_arr[i]==-1 && temp_arr[i-1]==-1)))
        {
            temp_del++;
        }
        else if ((temp_arr[i]==1 && temp_arr[i-1]==-1) || ((temp_arr[i]==-1 && temp_arr[i-1]==1)))
        {
            if (temp_del > delta)
            {
                index = temp_ind;
                delta = temp_del;
            }
            temp_del = 1;
            temp_ind = i+1;
        }
        else
        {
            if (temp_del > delta)
            {
                index = temp_ind;
                delta = temp_del;
            }
            temp_del = 1;
            temp_ind = i;
        }
    }
    cout << endl;
 
    // Вывод введенного массива
    for (int i=0; i<N; i++)
        cout << arr[i] << " ";
    cout << endl;
    if(temp_arr[index] == 1)
        cout << "Наибольшая по длине последовательность монотонно возрастающая" << endl;
    if(temp_arr[index] == -1)
        cout << "Наибольшая по длине последовательность монотонно убывающая" << endl;
    cout << "Номер элемента с которого начинается данная последовательность - " << index+1 << endl;
    cout << "Последовательность состоит из " << delta+1 << " значений." << endl;
    cout << "Последовательность: ";
    for (int i=0; i<delta+1; i++)
    {
        cout << arr[index+i] << " ";
    }
    cout << endl;
    return 0;
}
Добавлено через 13 часов 19 минут
Не у меня с математикой плохо ночью) 1 3 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
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
#include <iostream>
using namespace std;
 
int main()
{
    setlocale(LC_ALL,"Russian");
    int N;
    const int MAX = 1000;
    int arr[MAX], temp_arr[MAX];
    
    //Ввод массива
    cout << "Введите размерность массива: ";
    cin >> N;
    cout << "Заполните массив:\n";
    for (int i=0; i<N; i++)
    {
        cout << i+1 << " элемент: ";
        cin >> arr[i];
    }
 
    //создаю массив для отслеживания последовательносетей
    for (int i=0; i<N-1; i++)
    {
        temp_arr[i] = arr[i] - arr[i+1];
    }
 
 
    //вычисление наибольшей последовательности
    int index=0, delta=0, temp_ind=0, temp_del=0;
    temp_ind = 0;
    temp_del = 1;
 
    for (int i=0; i<N; i++)
    {
        if (temp_arr[i] == temp_arr[i+1])
        {
            temp_del++;
        }
        else
        {
            if(temp_del > delta)
            {
                index = temp_ind;
                delta = temp_del;
            }
            temp_del = 1;
            temp_ind = i+1;
        }
    }
    cout << endl;
 
    // Вывод введенного массива
    for (int i=0; i<N; i++)
        cout << arr[i] << " ";
    cout << endl;
    if(temp_arr[index] < 0)
        cout << "Наибольшая по длине последовательность монотонно возрастающая" << endl;
    if(temp_arr[index] > 0)
        cout << "Наибольшая по длине последовательность монотонно убывающая" << endl;
    cout << "Номер элемента с которого начинается данная последовательность - " << index+1 << endl;
    cout << "Последовательность состоит из " << delta+1 << " значений." << endl;
    cout << "Последовательность: ";
    for (int i=0; i<delta+1; i++)
    {
        cout << arr[index+i] << " ";
    }
    cout << endl;
    return 0;
}
0
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru