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

Найти количество непрерывно возрастающих серий в массиве - C++

Восстановить пароль Регистрация
 
Blagodetel
10 / 10 / 6
Регистрация: 16.12.2013
Сообщений: 66
18.03.2014, 08:40     Найти количество непрерывно возрастающих серий в массиве #1
Добрый день. Уже который день мучаюсь над решением задачи: В одномерном массиве нужно найти кол - во непрерывно возрастающих серий. Мне сия задача не удалась, рассчитываю на ваши идеи)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.03.2014, 08:40     Найти количество непрерывно возрастающих серий в массиве
Посмотрите здесь:

Определить количество серий, состоящих из квадратов натуральных чисел C++
C++ Даны два возрастающих массива x[k] и y[l]. Найти количество общих элементов
C++ Найти минимум среди максимумов всех возрастающих подпоследовательностей
C++ Найти в массиве максимальный и минимальный элементы в массиве и их количество
Процедуры и массив (создать, заполнить, вывести, подсчитать количество неубывающих серий) C++
В массиве Z (m) найти количество дежурств знака, то есть количество переходов с минуса на плюс и наоборот. Например, в последовательности 0, - 2, 0 - C++
C++ Найдите количество ее возрастающих подпоследовательностей
Найти наименьшее количество строго возрастающих участков в массиве C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
John Prick
754 / 687 / 123
Регистрация: 27.07.2012
Сообщений: 1,974
Завершенные тесты: 3
18.03.2014, 11:05     Найти количество непрерывно возрастающих серий в массиве #2
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
/*
В одномерном массиве нужно найти кол - во непрерывно возрастающих серий.
*/
 
#include <stdlib.h>
#include <ctime>
#include <iostream>
#include <algorithm>
#include <iterator>
 
const int N = 20;
int get_rand(void) { return rand() % 100; }
 
int main(void)
{
    setlocale(LC_ALL, "rus");
    srand(static_cast<unsigned int>(time(NULL)));
 
    int arr[N];
    std::generate(arr, arr + N, get_rand);
 
    std::cout << "Исходный массив: ";
    std::copy(arr, arr + N, std::ostream_iterator<int>(std::cout, " "));
    std::cout << std::endl;
 
    int series_count = 0;
    bool series_start = false;
    int last_element = arr[0];
    for (int i = 0; i < N; ++i)
    {
        if (series_start)
        {
            if (arr[i] > last_element)
                std::cout << arr[i] << ' ';
            else
            {
                ++series_count;
                series_start = false;
                std::cout << std::endl;
            }
        } else
        {
            if (arr[i] > last_element)
            {
                series_start = true;
                std::cout << "Серия №" << series_count + 1 << ": " <<
                    last_element << " " << arr[i] << " ";
                if (i == N - 1)
                    ++series_count;
            }
        }
        last_element = arr[i];
    }
 
    std::cout << std::endl;
    std::cout << "Кол-во возрастающих серий: " << series_count << '\n';
    system("pause");
}
Добавлено через 45 минут
Ну и вариант с большим применением STL.
Кликните здесь для просмотра всего текста
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
/*
В одномерном массиве нужно найти кол - во непрерывно возрастающих серий.
*/
 
#include <stdlib.h>
#include <ctime>
#include <iostream>
#include <algorithm>
#include <iterator>
 
const int N = 20;
int get_rand(void) { return rand() % 100; }
 
class series_counter
{
public:
    series_counter(int init_value):
      series_count(0),
      series_start(false),
      last_element(init_value)
    {}
    void operator()(int val)
    {
        bool greater = (val > last_element);
        bool start_new_series = !series_start && greater;
        bool end_series = series_start && !greater;
 
        if (end_series)
            std::cout << std::endl;
        else if (start_new_series)
        {
            ++series_count;
            std::cout << "Серия №" << series_count << ": " <<
                last_element << " " << val << " ";
        } else if (greater)
            std::cout << val << ' ';
 
        series_start = greater;
        last_element = val;
    }
    int result(void) const { return series_count; }
private:
    int series_count;
    bool series_start;
    int last_element;
};
 
int main(void)
{
    setlocale(LC_ALL, "rus");
    srand(static_cast<unsigned int>(time(NULL)));
 
    int arr[N];
    std::generate(arr, arr + N, get_rand);
 
    std::cout << "Исходный массив: ";
    std::copy(arr, arr + N, std::ostream_iterator<int>(std::cout, " "));
    std::cout << std::endl;
 
    series_counter counter = std::for_each(arr, arr + N, series_counter(arr[0]));
 
    std::cout << std::endl;
    std::cout << "Кол-во возрастающих серий: " << counter.result() << '\n';
    system("pause");
}
Yandex
Объявления
18.03.2014, 11:05     Найти количество непрерывно возрастающих серий в массиве
Ответ Создать тему
Опции темы

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