Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.91/11: Рейтинг темы: голосов - 11, средняя оценка - 4.91
0 / 0 / 0
Регистрация: 10.08.2014
Сообщений: 5
1

STL: найти все максимальные цепочки подряд идущих положительных чисел с указанием длины каждой цепочки

25.08.2014, 17:33. Показов 1977. Ответов 1
Метки нет (Все метки)

Создать массив длины N (число N вводится с клавиатуры). Заполнить массив рандомно. Найти все максимальные цепочки подряд идущих положительных чисел с указанием длины каждой цепочки (за идентификатор цепочки взять индекс первого её элемента). Для найденных чисел:
1) Определить количество найденных элементов
2) Найти все числа, которые больше А или меньше В (числа А и В вводятся с клавиатуры)
3) Найти и удалить число М (число М вводится с клавиатуры)
4) Найти число Р (вводится с клавиатуры) и вывести его соседей.
На заметку: Для выполнения пунктов (1)-(4) воспользоваться стандартными функциями.
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
25.08.2014, 17:33
Ответы с готовыми решениями:

Поиск самой длинной цепочки из подряд идущих одинаковых элементов в массиве
Помогите пожалуйста решить программу. Если можно как можно проще используя только циклы, ветвления...

Найти длину самой длинной цепочки положительных чисел
Найти длину самой длинной цепочки положительных чисел. Например, для последовательности -1, 1, 2,...

Найти суммы каждой пары подряд идущих чисел
Люди, срочно нужно написать програмку. Завтра сдавать. Дана последовательность натуральных чисел....

Найти длину самой длинной цепочки одинаковых чисел, идущих подряд
В файле data.txt записаны числа, сколько их – неизвестно. Найти длину самой длинной цепочки...

1
1035 / 906 / 322
Регистрация: 27.07.2012
Сообщений: 2,517
25.08.2014, 22:22 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
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
/*
Создать массив длины N (число N вводится с клавиатуры). Заполнить массив рандомно.
Найти все максимальные цепочки подряд идущих положительных чисел с указанием длины
каждой цепочки (за идентификатор цепочки взять индекс первого её элемента).
Для найденных чисел:
1)  Определить количество найденных элементов
2)  Найти все числа, которые больше А или меньше В (числа А и В вводятся с клавиатуры)
3)  Найти и удалить число М (число М вводится с клавиатуры)
4)  Найти число Р (вводится с клавиатуры) и вывести его соседей.
На заметку: Для выполнения пунктов (1)-(4) воспользоваться стандартными функциями.
*/
 
#include <stdlib.h>
#include <iostream>
#include <algorithm>
#include <functional>
#include <iterator>
#include <ctime>
 
int get_random(void) { return (rand() % 21) - 10; } // -10..10
 
struct positive_chain
{
    int * chain_begin;
    int size;
};
 
int set_and_show_positive_chains(int * const begin_arr, int * const end_arr, positive_chain * chains);
void find_greater_A_or_less_B_numbers(
    const positive_chain * const chains_begin,
    const positive_chain * const chains_end,
    const int A, const int B);
void del_from_all_chains(positive_chain * const begin, positive_chain * const end, const int M);
 
int main(void)
{
    setlocale(0, "rus");
    srand(static_cast<unsigned int>(time(NULL)));
 
    int N = 0;
    std::cout << "Введите количество элементов массива: N = ";
    std::cin >> N;
    std::cout << '\n';
 
    int * arr = new int[N];
    std::generate(arr, arr + N, get_random);
 
    std::cout << "Исходный массив: ";
    std::copy(arr, arr + N, std::ostream_iterator<int>(std::cout, " "));
    std::cout << "\n\n";
 
    positive_chain * chains = new positive_chain[N];
    int chains_count = set_and_show_positive_chains(arr, arr + N, chains);
    
    int A, B;
    std::cout << "Введите границы A и B: " << '\n';
    std::cout << "A = "; std::cin >> A;
    std::cout << "B = "; std::cin >> B;
    std::cout << '\n';
    find_greater_A_or_less_B_numbers(chains, chains + chains_count, A, B);
    std::cout << '\n';
 
    int M;
    std::cout << "Введите число для удаления: M = ";
    std::cin >> M;
    del_from_all_chains(chains, chains + chains_count, M);
    std::cout << "Изменённые цепочки положительных чисел: " << '\n';
    std::cout << "Цепочка" << "\t\t\t" << "всего чисел\n";
    std::copy(chains, chains + chains_count, std::ostream_iterator<positive_chain>(std::cout, "\n"));
    std::cout << '\n';
 
    int P;
    std::cout << "Введите число для поиска его соседей: P = ";
    std::cin >> P;
 
    delete [] arr;
    system("pause");
    return 0;
}
 
template <class ostream>
ostream & operator<<(ostream & out, const positive_chain & chain)
{
    std::copy(chain.chain_begin, chain.chain_begin + chain.size, std::ostream_iterator<int>(out, " "));
    out << "\t\t\t\t" << chain.size;
    return out;
}
 
int set_and_show_positive_chains(int * const begin_arr, int * const end_arr, positive_chain * chains)
{
    int * b = begin_arr;
    int chains_count = 0;
    while (b != end_arr)
    {
        b = std::find_if(b, end_arr, std::bind2nd(std::greater<int>(), 0));
        if (b != end_arr)
        {
            chains[chains_count].chain_begin = b;
            b = std::find_if(b, end_arr, std::not1(std::bind2nd(std::greater<int>(), 0)));
            chains[chains_count].size = std::distance(chains[chains_count].chain_begin, b);
            ++chains_count;
        }
    }
 
    std::cout << "Цепочки положительных чисел: " << '\n';
    std::cout << "Цепочка" << "\t\t\t" << "всего чисел\n";
    std::copy(chains, chains + chains_count, std::ostream_iterator<positive_chain>(std::cout, "\n"));
    std::cout << '\n';
    return chains_count;
}
 
template <class condition>
struct show_if_condition_t
{
    show_if_condition_t(condition C) : cond(C) {}
    void operator()(const positive_chain & chain)
    {
        for (int * i = chain.chain_begin; i != chain.chain_begin + chain.size; ++i)
        {
            if (cond(*i))
                std::cout << *i << " ";
        }
    }
private:
    condition cond;
};
 
template <class condition>
show_if_condition_t<condition> show_if_condition(condition C)
{
    return show_if_condition_t<condition>(C);
}
 
void find_greater_A_or_less_B_numbers(
    const positive_chain * const chains_begin,
    const positive_chain * const chains_end,
    const int A, const int B)
{
    std::cout << "Числа, большие A: ";
    std::for_each(chains_begin, chains_end, show_if_condition(std::bind2nd(std::greater<int>(), A)));
    std::cout << '\n';
    std::cout << "Числа, меньшие B: ";
    std::for_each(chains_begin, chains_end, show_if_condition(std::bind2nd(std::less<int>(), B)));
    std::cout << '\n';
}
 
void del_from_chain(positive_chain & chain, const int M)
{
    int * new_end = std::partition(chain.chain_begin, chain.chain_begin + chain.size,
        std::bind2nd(std::not_equal_to<int>(), M));
    chain.size = std::distance(chain.chain_begin, new_end);
}
 
void del_from_all_chains(positive_chain * const begin, positive_chain * const end, const int M)
{
    for (positive_chain * i = begin; i != end; ++i)
    {
        del_from_chain(*i, M);
    }
}
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
25.08.2014, 22:22

Найти длину самой длинной цепочки одинаковых чисел, идущих подряд в файле
2)Найти длину самой длинной цепочки одинаковых чисел, идущих подряд в файле input1.txt . Количество...

Найти длину самой длинной цепочки одинаковых чисел, идущих подряд, и записать её в файл output.txt
В файле data.txt записаны числа, сколько их – неизвестно. Найти длину самой длинной цепочки...

Определить длину самой длинной цепочки идущих подряд одинаковых чисел
в файле в столбик записаны целые числа, сколько их-неизвестно. Напишите программу, которая...

Напишите программу которая определяет длину самой длинной цепочки идущих подряд одинаковых чисел
В файле в столбик записаны целые числа, сколько их - неизвестно. Напишите программу которая...


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru