C/C++
Распределение элементов в динамическом массиве
На вход подается n целых чисел. Сформировать двумерный массив с различной длиной строк по следующему правилу: в первой строке расположить числа, оканчивающиеся на 0, во второй – на 1, в третьей на 2 и т. д. Одинаковые элементы в массив не добавлять.
#include <iostream>
#include <random>
#include <iomanip>
using namespace std;
bool contains(int* line, size_t n, int value) {
for (auto i = 0U; i < n; ++i) {
if (line[i] == value) {
return true;
}
}
return false;
}
int* push(int* line, size_t& n, int value) {
auto tmp = new int[n];
size_t i;
if (n > 0) {
if (contains(line, n, value)) {
return line;
}
for (i = 0; i < n; ++i) tmp[i] = line[i];
delete[] line;
}
line = new int[n + 1];
for (i = 0; i < n; ++i) line[i] = tmp[i];
line[i] = value;
delete[] tmp;
++n;
return line;
}
int main() {
uniform_int_distribution<> uid(1, 99);
mt19937 gen{ random_device()() };
const auto rows = 10U;
size_t box[rows]{};
auto matrix = new int*[rows];
for (auto i = 0U; i < rows; ++i) {
matrix[i] = nullptr;
}
system("chcp 1251 > nul");
cout << "Общее количество от 1 до 100: ";
size_t quantity;
cin >> quantity;
puts("");
do {
auto value = uid(gen);
auto i = value % 10;
matrix[i] = push(matrix[i], box[i], value);
} while (--quantity);
for (auto i = 0U; i < rows; ++i) {
auto j = 0U;
for (; j < box[i]; ++j) {
cout << setw(4) << matrix[i][j];
}
if (j > 0) {
puts("");
}
}
for (auto i = 0U; i < rows; ++i) {
if (matrix[i] != nullptr) delete[] matrix[i];
}
if (matrix != nullptr) {
delete[] matrix;
}
system("pause > nul");
}
#include <random>
#include <iomanip>
using namespace std;
bool contains(int* line, size_t n, int value) {
for (auto i = 0U; i < n; ++i) {
if (line[i] == value) {
return true;
}
}
return false;
}
int* push(int* line, size_t& n, int value) {
auto tmp = new int[n];
size_t i;
if (n > 0) {
if (contains(line, n, value)) {
return line;
}
for (i = 0; i < n; ++i) tmp[i] = line[i];
delete[] line;
}
line = new int[n + 1];
for (i = 0; i < n; ++i) line[i] = tmp[i];
line[i] = value;
delete[] tmp;
++n;
return line;
}
int main() {
uniform_int_distribution<> uid(1, 99);
mt19937 gen{ random_device()() };
const auto rows = 10U;
size_t box[rows]{};
auto matrix = new int*[rows];
for (auto i = 0U; i < rows; ++i) {
matrix[i] = nullptr;
}
system("chcp 1251 > nul");
cout << "Общее количество от 1 до 100: ";
size_t quantity;
cin >> quantity;
puts("");
do {
auto value = uid(gen);
auto i = value % 10;
matrix[i] = push(matrix[i], box[i], value);
} while (--quantity);
for (auto i = 0U; i < rows; ++i) {
auto j = 0U;
for (; j < box[i]; ++j) {
cout << setw(4) << matrix[i][j];
}
if (j > 0) {
puts("");
}
}
for (auto i = 0U; i < rows; ++i) {
if (matrix[i] != nullptr) delete[] matrix[i];
}
if (matrix != nullptr) {
delete[] matrix;
}
system("pause > nul");
}
Похожие вопросы
- Задачка по СИ на вставку элемента в динамический массив.
- Каким образом можно удалить элементы из динамического массива C++(без использования вспомогательного массива)
- Как работать с элементами динамического массива из функции?
- Устройство статических и динамических массивов в оперативной памяти (...)
- Двумерный динамический массив с неизвестны количеством столбиков или строк
- Почему динамический массив напрямую в функцию передать нельзя, а динамический массив указателей можно?
- C++ добавить элемент, который введет пользователь в одномерный динамический массив
- Динамический массив и указатель Си
- Задача по С++ ДИНАМИЧЕСКИЙ МАССИВ
- C++ динамический массив