Advertisement
bochkareffsasha

w1 ПРОГ_и_ОСН_АЛГ

Oct 25th, 2022
765
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 5.48 KB | None | 0 0
  1. #include <random>
  2. #include <iostream>
  3. #include <vector>
  4. #include <algorithm>
  5.  
  6. using namespace std;
  7.  
  8. void main()
  9. {
  10.     setlocale(LC_ALL, "Rus");
  11.     int size; // Зададим переменную для хранения размера нашей матрицы и спросим в консоли какой нужен размер
  12.     cout << "Matrix size: ";
  13.     cin >> size;
  14.     int a[8][8], i, j;
  15.     int choice;
  16.     cout << "1 - random \n2 - manual\n"; // Так же зададим переменную и исходя из ее значение заполним матрицу
  17.     cin >> choice;
  18.     // Реалицуем ручной ввод матрицы
  19.     if (choice == 2) {
  20.         cout << "Input matrix A \n";
  21.         //цикл по переменной i, в которой перебираем строки матрицы
  22.         for (i = 0; i < size; i++)
  23.             //цикл по переменной j, в котором перебираем элементы внутри строки
  24.             for (j = 0; j < size; j++)
  25.                 cin >> a[i][j]; //ввод очередного элемента матрицы
  26.         cout << "matrix A \n";
  27.         for (i = 0; i < size; i++) {
  28.             for (j = 0; j < size; j++)
  29.                 cout << a[i][j] << "\t"; //вывод очередного элемента матрицы
  30.             cout << endl; //переход на новую строку после вывода всех элементов строки
  31.         }
  32.     }
  33.     // Заполнение матрицы рандомно
  34.     else if (choice == 1) {
  35.         srand(time(NULL));
  36.         cout << "Input matrix A \n";
  37.         //цикл по переменной i, в которой перебираем строки матрицы
  38.         for (i = 0; i < size; i++)
  39.             //цикл по переменной j, в котором перебираем элементы внутри строки
  40.             for (j = 0; j < size; j++)
  41.                 a[i][j] = rand() % 100; //рандомный элемент матрицы
  42.         cout << "matrix A \n";
  43.         for (i = 0; i < size; i++) {
  44.             cout << "|\t";
  45.             for (j = 0; j < size; j++)
  46.                 cout << a[i][j] << "\t"; //вывод очередного элемента матрицы
  47.             cout << "|\t";
  48.             cout << endl; //переход на новую строку после вывода всех элементов строки
  49.         }
  50.     }
  51.  
  52.     else
  53.         cout << "Пожалуйста введите корректное значение\n"; // Защита от дурака
  54.  
  55.     // Зададим вектор в котором будем хранить временные значения
  56.     vector<int> temp_a;
  57.  
  58.     // запоминаем в вектор значения по периметру матрицы
  59.     for (int i = 0; i < size; i++) {
  60.         for (int j = 0; j < size; j++) {
  61.             if ((i == 0) || (j == 0) || (i == size - 1) || (j == size - 1)) {
  62.                 temp_a.push_back(a[i][j]);
  63.             }
  64.         }
  65.     }
  66.  
  67.     // сортировка по возрастанию (для убывания добавить третий параметр greater<char>())
  68.     sort(temp_a.begin(), temp_a.end());
  69.  
  70.     int counter = 0;
  71.     // заполняем первую строку, кроме последнего элемента
  72.     i = 0;
  73.     for (j = 0; j < size - 1; j++) {
  74.         a[i][j] = temp_a[counter];
  75.         counter++;
  76.     }
  77.  
  78.     // заполняем последний столбик
  79.     j = size - 1;
  80.     for (i = 0; i < size; i++) {
  81.         a[i][j] = temp_a[counter];
  82.         counter++;
  83.     }
  84.  
  85.     // заполняем последную строку
  86.     i = size - 1;
  87.     for (j = size - 2; j >= 0; j--) {
  88.         a[i][j] = temp_a[counter];
  89.         counter++;
  90.     }
  91.  
  92.     // заполняем первый столбик
  93.     j = 0;
  94.     for (i = size - 2; i >= 1; i--) {
  95.         a[i][j] = temp_a[counter];
  96.         counter++;
  97.     }
  98.    
  99.     cout << "matrix A \n";
  100.     for (i = 0; i < size; i++) {
  101.         cout << "|\t";
  102.         for (j = 0; j < size; j++)
  103.             cout << a[i][j] << "\t"; //вывод очередного элемента матрицы
  104.         cout << "|\t";
  105.         cout << endl; //переход на новую строку после вывода всех элементов строки
  106.     }
  107.  
  108.     // задание 2
  109.  
  110.     // для хранения номеров столбцов
  111.     vector<int> temp;
  112.     // проходимся по столбцам а не по строкам
  113.     for (int i = 0; i < size; i++) {
  114.         temp_a.clear();
  115.         for (int j = 0; j < size; j++) {
  116.             temp_a.push_back(a[j][i]);
  117.         }
  118.         // проверяем строку на повторения
  119.         for (int j = 0; j < size; j++) {
  120.             if ((count(temp_a.begin(), temp_a.end(), temp_a[j]) != 0) && (count(temp_a.begin(), temp_a.end(), temp_a[j]) != 1)) {
  121.                 temp.push_back(i + 1);
  122.                 break;
  123.             }
  124.         }
  125.     }
  126.  
  127.     // если не пустой
  128.     if (!temp.empty()) {
  129.         cout << "Номера столбцов с повторением элементов:\n";
  130.         for (int i = 0; i < temp.size(); i++) {
  131.             cout << temp[i] << ' ';
  132.         }
  133.     }
  134.     else {
  135.         cout << "Столбцы с повторением элементов отсутствуют\n";
  136.     }
  137.  
  138. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement