C/C++

Функции и массивы С++

2.1 Используя функции, сформировать с помощью ДСЧ одномерный массив и
вывести его на печать.

2.2 Выполнить обработку одномерного массива в соответствии с вариантом,
используя функции (удалить из массива все числа Фибоначчи) результат вывести на печать.
При решении задачи объявлять статический одномерный массив на
100 элементов, но формировать массив из n элементов, n<100.
Ввод значений n, m, K осуществлять с клавиатуры.
#include <algorithm>
#include <iostream>
#include <vector>
#include <random>
#include <iomanip>
using namespace std;
class Fibonacci {
public:
Fibonacci() {
fill();
}
bool contains(unsigned n) {
return find(box.begin(), box.end(), n) != box.end();
}
private:
vector<unsigned> box{ 0U, 1U };
void fill() {
unsigned n, m, sum;
while (true) {
sum = box[box.size() - 2] + box.back();
if (sum < box.back()) break;
box.push_back(sum);
}
}
};
void fill_random(unsigned* box, const size_t length, unsigned left, unsigned right) {
if (left > right) swap(left, right);
uniform_int_distribution<unsigned> uid(left, right);
mt19937 gen{ random_device()() };
for (size_t i = 0; i < length; ++i) box[i] = uid(gen);
}
void show(const char* msg, unsigned* box, const size_t length, const streamsize width) {
cout << msg;
for (size_t i = 0; i < length; ++i) cout << setw(width) << box[i];
puts("");
}
void remove_element(unsigned* box, size_t& length, unsigned* pos) {
if (box && length && pos) {
auto last = box + length - 1U;
if (pos != last) {
while (pos != last) {
*pos = *(pos + 1);
++pos;
}
}
--length;
}
}
int main() {
const size_t buffer = 100;
unsigned box[buffer];
cout << "n: ";
size_t n;
cin >> n;
if (n > buffer) n = buffer;
cout << "m, k: ";
unsigned m, k;
cin >> m >> k;
fill_random(box, n, m, k);
show("before:", box, n, 4);
Fibonacci fib;
auto end = box + n;
for (auto beg = box; beg != end; ++beg) {
if (fib.contains(*beg)) {
remove_element(box, n, beg);
--end;
--beg;
}
}
show(" after:", box, n, 4);
}
Misha Kovalskyy
Misha Kovalskyy
93 386
Лучший ответ