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

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

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

массив - C++

09.09.2011, 22:24. Просмотров 466. Ответов 12
Метки нет (Все метки)

Требуется подсчитать максимальное количество неубывающих подряд идущих элементов массива.
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++
объявить массив 5на5. 3аполнить массив '0' C++
Как передать массив в массив с указателем C++
Преобразовать массив Int в массив строк C++
Передать массив I(10) в массив J(10) в обратной последовательности C++
Передать массив I в массив J в обратной последовательности C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Zverit
Уничтожитель печенек
 Аватар для Zverit
277 / 205 / 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
277 / 205 / 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
277 / 205 / 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     массив
Еще ссылки по теме:

Почему массив не присвоился в другой массив? C++
C++ Нужно в массив А записать числители, а в массив В знаменатели
Преобразовать массив LPWSTR в массив BYTE C++
Массив: Обработать массив А, состоящий из произвольных чисел C++
C++ Массив: Задать радномно массив чисел (натуральных) от 0 до 10.

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

Или воспользуйтесь поиском по форуму:
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     массив
Ответ Создать тему
Опции темы

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