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

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

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Вычислить значение выражения http://www.cyberforum.ru/cpp-beginners/thread1122493.html
Вычислить и вывести на экран. X и K ввести с клавиатуры: S=∑_(k=0)^K(1/2^k +(1+kx)/(1+kx^2 )) +k/2
C++ MSVS 2010. Автоматическое подключение stdafx.h ко всем новым проектам Как сразу stdafx.h сделать со своим кодом по умолчанию ? как подключить библиотеку ,чтобы сразу на все проекты ,когда создавал появлялась автоматический? (в папке lib нет фаилов с... http://www.cyberforum.ru/cpp-beginners/thread1122483.html
C++ Найти сумму первой и последней цифры и разность второй и третьей
Составить программу
Для заданных значений a, b, n вычислить значение Xn C++
как сделать так что бы: допустим у нас есть a=3, b=4, x1=1 x2=x1*a*b x3=x2*a*b x4=x3*a*b xn=xn-1*a*b знаю что через for можно и n можно задать, только как?
C++ Реализовать пул потоков, в который можно помещать функцию http://www.cyberforum.ru/cpp-beginners/thread1122452.html
не могу реализовать как в книге главу 9 пул потоков который,в который можно помещать функцию что бы она возвращала значение вот код который там имеется #include <condition_variable> #include...
C++ Ввести строку. Выдать все слова, которые имеют длину больше, чем длина последнего слова строки ввести строку. на печать, выдать все слова, которые имеют длину больше, чем длина последнего слова строки. подробнее

Показать сообщение отдельно
John Prick
801 / 734 / 145
Регистрация: 27.07.2012
Сообщений: 2,107
Завершенные тесты: 3
18.03.2014, 11:05
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");
}
1
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru