Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <iomanip>
- #include <random>
- using namespace std;
- using box_t = pair<int*, const size_t>;
- class Array {
- public:
- static void fill(box_t& box, const int a, const int b, const int m) {
- auto[sequence, length] = box;
- for (auto i = 0U; i < length; ++i) sequence[i] = generate(a, b) * m;
- }
- static void show(const box_t& box, const streamsize width = 5U) {
- auto[sequence, length] = box;
- for (auto i = 0U; i < length; ++i) cout << setw(width) << sequence[i];
- cout.put('\n');
- }
- static pair<int, int> min_even(const box_t& box) {
- auto[sequence, length] = box;
- auto min = numeric_limits<int>::max();
- auto index = -1;
- for (auto i = 0U; i < length; ++i)
- if (0 == sequence[i] % 2 && sequence[i] < min) {
- min = sequence[i];
- index = i;
- }
- return { index, min };
- }
- static pair<int, int> max_odd(const box_t& box) {
- auto[sequence, length] = box;
- auto max = numeric_limits<int>::min();
- auto index = -1;
- for (auto i = 0U; i < length; ++i)
- if (sequence[i] & 1 && sequence[i] > max) {
- max = sequence[i];
- index = i;
- }
- return { index, max };
- }
- static void split_and_reverse(box_t& box, const size_t parts) {
- auto[sequence, length] = box;
- const auto part = length / parts;
- for (auto i = 0U; i < length; i += part) {
- const auto beg = sequence + i;
- auto last = beg + part - 1;
- if (i + part > length) {
- const auto tail = i + part - length;
- last -= tail;
- }
- reverse(beg, last);
- }
- }
- private:
- static int generate(int a, int b) {
- if (a > b) swap(a, b);
- const uniform_int_distribution<> uid(a, b);
- random_device rd;
- mt19937 gen(rd());
- return uid(gen);
- }
- static void reverse(int* beg, int* last) {
- while (beg < last) swap(*beg++, *last--);
- }
- };
- int main() {
- const auto n = 40U;
- const auto l = -14, r = 14, m = 10;
- int a[n];
- box_t box{ a, n };
- Array::fill(box, l, r, m);
- Array::show(box);
- auto[index_min, min_even] = Array::min_even(box);
- if (index_min != -1) cout << "Min value: " << min_even << "; index: " << index_min << '\n';
- // Посе умножении любого числа на чётное оно также становится чётным! И тем не менее...
- auto[index_max, max_odd] = Array::max_odd(box);
- if (index_max != -1) cout << "Max value: " << max_odd << "; index: " << index_max << '\n';
- Array::split_and_reverse(box, 10U);
- Array::show(box);
- system("pause");
- }
Advertisement
Add Comment
Please, Sign In to add comment