Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Вычисление длины максимально неубывающей последовательности в массиве

71K
03 ноября 2013 года
KLOM
12 / / 03.11.2013
Помогите, пожалауйста, с задачкой:

Дан одномерный массив arrX(100) As Integer. Необходимо определить длину максимальной последовательности элементов, отсортированных по возрастанию. (Если весь массив отсортирован, то результат будет 101).
446
03 ноября 2013 года
Meander
487 / / 04.09.2011
Переведи на Русский, выражение:
"длина максимальной последовательности элементов, отсортированных по возрастанию", пожалуйста.
71K
03 ноября 2013 года
KLOM
12 / / 03.11.2013
количество элементов массива, которые идут по возрастанию
Предположим, идут массив заполнен следующими числами: 2 3 5 7 9 11, 6 8 9 10 15, 5, 4 14 16 20 22, 3 4 и т. д. получается, что тут длина максимальной последовательности элементов будет 6
326
03 ноября 2013 года
sadovoya
757 / / 19.11.2005
На С++, но с комментариями. Надеюсь разберетесь:

Код:
#include <cstdio>

int main() {

    //массив:
    int a[] = {2, 3, 5, 7, 9, 11, 6, 8, 9, 10, 15, 5, 4, 14, 16, 20, 22, 3, 4};

    //длина массива:
    int len = sizeof(a)/sizeof(a[0]);

    //счетчики:
    int cnt = 1, cnt_max = 0;

    //цикл:
    for(int i = 0; i < len - 1; i++)
    {
        if(a[i+1] > a[i]) //если след.> текущего., то:
        {
            cnt = cnt + 1;
        }
        else //иначе:
        {
            if (cnt > cnt_max) cnt_max = cnt;
            cnt = 1;
        }
    }

    //вывод результата:
    printf("%dn", cnt_max);

    return 0;
}
71K
03 ноября 2013 года
KLOM
12 / / 03.11.2013
Спасибо=)
числа я привела просто для примера, на самом деле они могут быть любыми..
//длина массива:
int len = sizeof(a)/sizeof(a[0]); - не очень поняла с этой записью....
в visual basic у меня что-то такое вышло:
Public Function MaxLength(ByVal arrX() As Integer) As Integer
Dim IntS As Integer 'счетчик цикла
Dim intMax As Integer 'наибольшая последовательность
Dim intC As Integer 'количество последовательных элементов
intC = 1
IntMax = 0
For intS = 0 To 100
If arrX(IntS) > arrX(IntS + 1) Then
intC += intC
ElseIf intC > intMax Then
intMax = intC
End If
Next
Return intMax
End Function

Но что-то я сомневаюсь, что это верно=))
326
03 ноября 2013 года
sadovoya
757 / / 19.11.2005
Вы забыли в единицу вернуть intC после intMax = intC.

Возможно не очень понятный момент в моем else.

 
Код:
else //иначе:
         {
             if (cnt > cnt_max) cnt_max = cnt; //самостоятельный if
             cnt = 1;//эта строка отдельная в else, не продолжение if из строки выше
         }
Надеюсь с этими комментариями понятней.

Цитата:
числа я привела просто для примера, на самом деле они могут быть любыми..
//длина массива:
int len = sizeof(a)/sizeof(a[0]); - не очень поняла с этой записью....



Такая запись в C++ и определяет длину массива. Массив можно поменять, длина автоматически пересчитается. Пример мой не зависит от конкретного массива, просто взял для иллюстрации приведенный вами.

Похоже у вас есть ошибка с выходом за границы массива в этом месте:

 
Код:
For intS = 0 To 100
 If arrX(IntS) > arrX(IntS + 1) Then
потому, что arrX(IntS+1) будет ссылаться на элемент c индексом 101 при intS = 100.

Поскольку ваш массив состоит из 101 элемента и индексируется от нуля (я правильно понял?), то надо писать цикл от 0 до 99 включительно.

И еще: правильное такое условие: arrX(IntS) < arrX(IntS + 1), а у вас обратный знак.. Это для возрастающей последовательности, а для неубывающей <= (так и не понял, в вопросе неубывающая, в пояснении возрастающая. Это немного разные вещи).
71K
04 ноября 2013 года
KLOM
12 / / 03.11.2013
спасибо за разъяснения=)
еще один маленький вопрос: зачем возвращать в единицу intC после intMax=intC?
326
04 ноября 2013 года
sadovoya
757 / / 19.11.2005
Потому, что для каждой очередной последовательности счет должен начинаться заново.
71K
04 ноября 2013 года
KLOM
12 / / 03.11.2013
но в условии уже указано, что IntC=1..
или обязательно надо повторять в цикле?
326
04 ноября 2013 года
sadovoya
757 / / 19.11.2005
Разумеется надо.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог