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

массив - C++

Восстановить пароль Регистрация
 
xexew
0 / 0 / 0
Регистрация: 22.02.2011
Сообщений: 76
09.09.2011, 22:24     массив #1
Требуется подсчитать максимальное количество неубывающих подряд идущих элементов массива.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <iostream>
using namespace std;
void main()
{
const n=10;
int a[n],i,max=1,k=1;
for(i=0;i<n;i++)
cin>>a[i];
//for(i=0;i<n;i++)
//cout<<"a["<<i<<"]="<<a[i]<<endl;
for(i=0;i<n;i++)
{
    if(a[i+1]>=a[i])k++;
}
if (k>max) cout<<k;
else cout<<max<<endl;
}
при вводе чисел 1 2 3 4 5 1 1 1 1 1 выдает ответ 10, можете подсказать что не так?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.09.2011, 22:24     массив
Посмотрите здесь:

C++ Массив: Сформируйте массив C[n+m], состоящий из элементов массивов А и В, упорядоченный по возрастанию.
Дан массив A[N]. заполнить массив В[N] элементами массива A[N], которые удовлетворяют двойному неравенству C++
C++ Найти ошибку. Записать 20 целых чисел в массив. Переписать отрицательные в массив А, а положительные в Б
Файлы и массив (сделать так, чтобы массив заполнялся значениями из этого же файла) C++
C++ Включить новый элемент в массив, упорядоченный по возрастанию, с сохранением упорядоченности. (рандомный массив)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Zverit
Уничтожитель печенек
 Аватар для Zverit
276 / 204 / 21
Регистрация: 07.02.2010
Сообщений: 723
09.09.2011, 22:29     массив #2
C++
1
if (a[i+1] <= a[i]) k++;
alkagolik
 Аватар для alkagolik
1510 / 616 / 79
Регистрация: 15.07.2011
Сообщений: 3,552
09.09.2011, 22:38     массив #3
Цитата Сообщение от ITZver Посмотреть сообщение
C++
1
if (a[i+1] <= a[i]) k++;
у ТС все правильно за некоторыми исключениями:
1. соответствие должно быть строгим, т.е. a[i+1]>a[i]
2. твой алгоритм не учитывает ситуации когда есть несколько последовательностей а именно:
123123 в конечном итоге твоя программа выдаст 5. сейчас накидаю
xexew
0 / 0 / 0
Регистрация: 22.02.2011
Сообщений: 76
09.09.2011, 22:44  [ТС]     массив #4
то что должно быть нестрогим - это правильно, неубывающая же, а не возрастающая
iama
 Аватар для iama
1249 / 974 / 48
Регистрация: 30.07.2010
Сообщений: 5,297
09.09.2011, 22:50     массив #5
xexew, вы не сохраняете длину каждой наибольшей подпоследовательности и не обнуляете длину текущей, от того и результат такой

Добавлено через 2 минуты
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
int a[100], n, i, k, q;
 
// вводим данные
 
k = q = 1;
 
for (i = 1; i < n; i++)
  if (a[i] >= a[i-1])
    k++;
  else
  {
    q = max(q, k);
    k = 1;
  }
 
q = max(q, k);
 
// ответ лежит в q
alkagolik
 Аватар для alkagolik
1510 / 616 / 79
Регистрация: 15.07.2011
Сообщений: 3,552
09.09.2011, 22:52     массив #6
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <iostream>
#define SIZE_M    20
int main(){
    int mass[] = {1,2,3,4,1,
                  1,2,3,5,6,3,3,
                  3,4,5,6,7,8,9,10};
    int tmp = 0, count = 0;
    for (int i =0;i!=SIZE_M; ++i){
        if(mass[i+1]>=mass[i]){
        ++count;
            if(tmp < count) tmp = count;
        }
        else count = 0;
    }
    std::cout << tmp;
    return 0;
}
да, я тут подсчитал немного не ту последовательность, надо неубывающих, а я возрастающих, сейчас подправлю.
Подправил,
ITZver, извиняюсь, я немного перепутал условие
iama
 Аватар для iama
1249 / 974 / 48
Регистрация: 30.07.2010
Сообщений: 5,297
09.09.2011, 22:54     массив #7
alkagolik, длина должна быть неубывающей последовательности, у вас - возрастающая

upd: уже поправили
Zverit
Уничтожитель печенек
 Аватар для Zverit
276 / 204 / 21
Регистрация: 07.02.2010
Сообщений: 723
09.09.2011, 22:54     массив #8
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
int n, k, mn, max, a;
    k = 0;
    cin>>n;
    for (int i = 1; i <= n; i++)
    {
        cin>>a;
        if(a <= mn)
        {
           mn = a; 
           k++;
        }
        else if (k >= max)
        {
            max = k ;
            k = 0;
        }
    }
cout<< max;
xexew
0 / 0 / 0
Регистрация: 22.02.2011
Сообщений: 76
09.09.2011, 22:57  [ТС]     массив #9
я лишь только начал изучать с++, что это означает ?
C++
1
q = max(q, k)
Добавлено через 54 секунды
ух ты.. спасибо всем=) сейчас буду разбираться)
Zverit
Уничтожитель печенек
 Аватар для Zverit
276 / 204 / 21
Регистрация: 07.02.2010
Сообщений: 723
09.09.2011, 22:58     массив #10
xexew, функция max возвращает наибольшее значение.
З.Ы заголовочный файл <algorithm>
iama
 Аватар для iama
1249 / 974 / 48
Регистрация: 30.07.2010
Сообщений: 5,297
09.09.2011, 23:02     массив #11
xexew, то же самое, что и
C++
1
2
if (k > q)
  q = k;
xexew
0 / 0 / 0
Регистрация: 22.02.2011
Сообщений: 76
11.09.2011, 00:56  [ТС]     массив #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
#include <stdafx.h>
#include <iostream>
#include <algorithm>
using namespace std;
 
int _tmain(int argc, _TCHAR* argv[])
{
    const n=10;
    int a[n],i,k,m;
 
 for(i=0;i<n;i++)
     cin>>a[i];
 
 k=m=1;
 
 for(i=0;i<n;i++)
     
     if(a[i]>=a[i-1])
         
         k++;
     
     else 
     {
         m=max(m,k);
         k=1;
     }
     
     m=max(m,k);
 
     cout<<m<<endl;
    return 0;
}
выдает ошибку: error C4430: missing type specifier - int assumed.

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

Массивы и указатели (нужно передать массив I[10] в массив J[10] в обратной последовательности) C++
C++ Задано массив строк произвольной длины. Отформатировать данный массив по ширине поля.
Записать все положительные элементы матрицы в массив arrP, а отрицательные - в массив arrN C++

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

Или воспользуйтесь поиском по форуму:
Ma3a
Эксперт C++
612 / 456 / 31
Регистрация: 28.01.2011
Сообщений: 605
11.09.2011, 01:01     массив #13
Цитата Сообщение от xexew Посмотреть сообщение
const n=10;
должно быть "const int n = 10;"
Yandex
Объявления
11.09.2011, 01:01     массив
Ответ Создать тему
Опции темы

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