Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <random>
- #include <iostream>
- #include <vector>
- #include <algorithm>
- using namespace std;
- void main()
- {
- setlocale(LC_ALL, "Rus");
- int size; // Зададим переменную для хранения размера нашей матрицы и спросим в консоли какой нужен размер
- cout << "Matrix size: ";
- cin >> size;
- int a[8][8], i, j;
- int choice;
- cout << "1 - random \n2 - manual\n"; // Так же зададим переменную и исходя из ее значение заполним матрицу
- cin >> choice;
- // Реалицуем ручной ввод матрицы
- if (choice == 2) {
- cout << "Input matrix A \n";
- //цикл по переменной i, в которой перебираем строки матрицы
- for (i = 0; i < size; i++)
- //цикл по переменной j, в котором перебираем элементы внутри строки
- for (j = 0; j < size; j++)
- cin >> a[i][j]; //ввод очередного элемента матрицы
- cout << "matrix A \n";
- for (i = 0; i < size; i++) {
- for (j = 0; j < size; j++)
- cout << a[i][j] << "\t"; //вывод очередного элемента матрицы
- cout << endl; //переход на новую строку после вывода всех элементов строки
- }
- }
- // Заполнение матрицы рандомно
- else if (choice == 1) {
- srand(time(NULL));
- cout << "Input matrix A \n";
- //цикл по переменной i, в которой перебираем строки матрицы
- for (i = 0; i < size; i++)
- //цикл по переменной j, в котором перебираем элементы внутри строки
- for (j = 0; j < size; j++)
- a[i][j] = rand() % 100; //рандомный элемент матрицы
- cout << "matrix A \n";
- for (i = 0; i < size; i++) {
- cout << "|\t";
- for (j = 0; j < size; j++)
- cout << a[i][j] << "\t"; //вывод очередного элемента матрицы
- cout << "|\t";
- cout << endl; //переход на новую строку после вывода всех элементов строки
- }
- }
- else
- cout << "Пожалуйста введите корректное значение\n"; // Защита от дурака
- // Зададим вектор в котором будем хранить временные значения
- vector<int> temp_a;
- // запоминаем в вектор значения по периметру матрицы
- for (int i = 0; i < size; i++) {
- for (int j = 0; j < size; j++) {
- if ((i == 0) || (j == 0) || (i == size - 1) || (j == size - 1)) {
- temp_a.push_back(a[i][j]);
- }
- }
- }
- // сортировка по возрастанию (для убывания добавить третий параметр greater<char>())
- sort(temp_a.begin(), temp_a.end());
- int counter = 0;
- // заполняем первую строку, кроме последнего элемента
- i = 0;
- for (j = 0; j < size - 1; j++) {
- a[i][j] = temp_a[counter];
- counter++;
- }
- // заполняем последний столбик
- j = size - 1;
- for (i = 0; i < size; i++) {
- a[i][j] = temp_a[counter];
- counter++;
- }
- // заполняем последную строку
- i = size - 1;
- for (j = size - 2; j >= 0; j--) {
- a[i][j] = temp_a[counter];
- counter++;
- }
- // заполняем первый столбик
- j = 0;
- for (i = size - 2; i >= 1; i--) {
- a[i][j] = temp_a[counter];
- counter++;
- }
- cout << "matrix A \n";
- for (i = 0; i < size; i++) {
- cout << "|\t";
- for (j = 0; j < size; j++)
- cout << a[i][j] << "\t"; //вывод очередного элемента матрицы
- cout << "|\t";
- cout << endl; //переход на новую строку после вывода всех элементов строки
- }
- // задание 2
- // для хранения номеров столбцов
- vector<int> temp;
- // проходимся по столбцам а не по строкам
- for (int i = 0; i < size; i++) {
- temp_a.clear();
- for (int j = 0; j < size; j++) {
- temp_a.push_back(a[j][i]);
- }
- // проверяем строку на повторения
- for (int j = 0; j < size; j++) {
- if ((count(temp_a.begin(), temp_a.end(), temp_a[j]) != 0) && (count(temp_a.begin(), temp_a.end(), temp_a[j]) != 1)) {
- temp.push_back(i + 1);
- break;
- }
- }
- }
- // если не пустой
- if (!temp.empty()) {
- cout << "Номера столбцов с повторением элементов:\n";
- for (int i = 0; i < temp.size(); i++) {
- cout << temp[i] << ' ';
- }
- }
- else {
- cout << "Столбцы с повторением элементов отсутствуют\n";
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement