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

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

Войти
Регистрация
Восстановить пароль
 
Bleize
0 / 0 / 0
Регистрация: 17.10.2010
Сообщений: 26
#1

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

26.11.2010, 21:59. Просмотров 1052. Ответов 1
Метки нет (Все метки)

Найти максимальную по длине монотонную (т. е. либо неубывающую, либо невозрастающую) подпоследовательность заданного массива целых чисел
P.S. При выполнении работы используются статические массивы. Для организации статических массивов с псевдопеременными границами необходимо объявить массив достаточно большой длины N. Затем пользователь вводит реальную длину массива (не больше N) и работает с массивом той длины, которую он сам указал. Остальные элементы (хотя память под них и будет выделена) не рассматриваются. При уменьшении или увеличении длины массива необходимо изменять его реальную длину.

Добавлено через 4 минуты
[20:56:57]
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
 #include <iostream>
using namespace std;
 
void main()
{
 const int N = 1000;
 int a[N], size, i, k1, k2, k3, n, k;
 cout<<"Enter the size of the array: "; cin>>size;
 for(i=0;i<size;i++){cout<<"the "<<i+1<<"th element: ";cin>>a[i];}
 cout<<endl<<"Array: ";
 for(i=0;i<size;i++)cout<<a[i]<<" ";
 cout<<endl;
 for(i=0,k1=0,k2=1,n=0;i<size-1;i++)
 {if(a[i+1]<a[i])k1++; else{if(k1>=k2)k2=k1; k1=0;} if(k2<=k1)n=i+1;} 
 if(k2<k1) k2=k1;
 for(i=0,k1=0,k3=1,k=0;i<size-1;i++)
 {if(a[i+1]>a[i])k1++; else{if(k1>=k3)k3=k1; k1=0;} if(k3<=k1)k=i+1;}
 if(k3<k1) k3=k1;
 if(n==size-2) if(a[size-1]<a[n]) {n=size-1; k2++;}
 if(k==size-2) if(a[size-1]>a[k]) {k=size-1; k3++;}
 if(k3>k2){n=k; k2=k3;} else if(k3=k2) if(k>n){n=k; k2=k3;}
 cout<<"Maximum long period - "<<k2+1<<" element(s): ";
 for(i=n-k2;i<=n;i++) cout<<a[i]<<" "; 
 cout<<endl; 
}
или помогите исправить ошибку:
размер 10
10 9 8 7 6 7 6 5 10 20(р-тат неверен)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.11.2010, 21:59
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Массивы(статические) (C++):

Статические массивы - C++
int a; cout &lt;&lt; sizeof(a) &lt;&lt; endl; cout &lt;&lt; a &lt;&lt; endl; Добрый день. Почему выводится, что sizeof(a)=16 байт. a же это адрес,...

Статические массивы - C++
Перевести в веденой строке все буквы из нижнего регистра в верхний?? Пожалуйста помогите!!! Добавлено через 56 секунд Пожалуйста!!!

статические массивы - C++
Дана ценлочисленная прямоугольная матрица. Определитть номер первого из столбцов, содержащих хотя бы один нулевой элемент. ...

статические массивы - C++
Помогите, пожалуйста) Нужно выполнить следующее задание с использованием статических массивов: Дана квадратная матрица. Упорядочить...

Массивы. Статические и динамические - C++
Объясните, пожалуйста, что такое статические массивы и что такое динамические? Чем отличаются? Как их создавать? Какой лучше?

Одномерные статические массивы - C++
Ввести одномерный статический массив из к чисел. И сдвинуть элементы массива циклически на n позиций влево.

1
ne6u4u
12 / 12 / 0
Регистрация: 14.11.2010
Сообщений: 29
27.11.2010, 15:40 #2
простестил тока на твоем примере, так что 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
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.11.2010, 15:40
Привет! Вот еще темы с ответами:

Динамические и статические массивы - C++
Главное отличие динамических массивов от статических состоит в том, что они могут иметь неопределенный размер до компиляции. Но статический...

двумерные статические массивы - C++
Дана квадратная матрица. Отсортировать по убыванию первую её строку и все строки содержащие элементы, равные наибольшему элементу матрицы. ...

Одномерные статические массивы - C++
1) Необходимо удалить все четные элементы 2) Необходимо добавить k элементов в начало массива. 3) Необходимо переставить четные...

Статические массивы, члены класса - C++
необходимо создать статический массив. компилятор gcc #include&lt;iostream&gt; class c{ public: static const char x = &quot;qwe&quot;; ...


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

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

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