Advertisement
Infiniti_Inter

79 2 (7)

May 14th, 2019
170
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.78 KB | None | 0 0
  1. #include <iostream>
  2. #include <string>
  3. #include <fstream>
  4.  
  5. using namespace std;
  6.  
  7. ifstream in("input.txt");
  8. ofstream out("output.txt");
  9.  
  10. const int MAXSIZE = 100;
  11.  
  12. void sort(int * a, int n)
  13. {
  14.     for (int i = 1; i < n; ++i)
  15.     {
  16.         for (int j = i; j > 0 && a[j - 1] > a[j]; j--)
  17.         {
  18.             swap(a[j], a[j - 1]);
  19.         }
  20.     }
  21. }
  22.  
  23.  
  24. int* Get_Line(int** a, int k, int n)
  25. {
  26.     int SIZE, i, j, ptr = 0;
  27.     if (k < n) {
  28.         SIZE = k + 1;
  29.         i = n - k - 1;
  30.         j = 0;
  31.     }
  32.     else {
  33.         SIZE = 2 * n - 1 - k;
  34.         i = 0;
  35.         j = k - n + 1;
  36.     }
  37.     int* res = new int[SIZE];
  38.     while (i < n && j < n)
  39.         res[ptr++] = a[i++][j++];
  40.     return res;
  41. }
  42.  
  43. void Replace(int** a, const int* arr, int k, int n)
  44. {
  45.     int i, j, ptr = 0;
  46.     if (k < n) {
  47.         i = n - k - 1;
  48.         j = 0;
  49.     }
  50.     else {
  51.         i = 0;
  52.         j = k - n + 1;
  53.     }
  54.     while (i < n && j < n)
  55.         a[i++][j++] = arr[ptr++];
  56. }
  57.  
  58. int main()
  59. {
  60.     int n;
  61.     in >> n;//размер матрицы
  62.  
  63.     int** a = new int*[n];//cоздание матрицы
  64.     for (int i = 0; i < n; ++i)
  65.         a[i] = new int[n];
  66.  
  67.     for (int i = 0; i < n; ++i)//ввод матрцы
  68.         for (int j = 0; j < n; ++j)
  69.             in >> a[i][j];
  70.  
  71.     for (int k = 0; k < 2 * n - 1; ++k)//переберем все диагонали
  72.     {
  73.         int * cur = Get_Line(a, k, n);//функция возвращает k-ю диагональ матрицы a
  74.         int SIZE;//размер k-й диагонали
  75.         if (k < n)
  76.             SIZE = k + 1;
  77.         else
  78.             SIZE = 2 * n - k - 1;
  79.        
  80.         sort(cur, SIZE);//сортировка
  81.         Replace(a, cur, k, n);//заменяет в матрице a k-диагональ массивом cur
  82.         delete[] cur;
  83.  
  84.     }
  85.     for (int i = 0; i < n; ++i, cout << '\n')
  86.         for (int j = 0; j < n; ++j, cout << ' ')
  87.             cout << a[i][j];
  88.     /*
  89.     пример входного файла
  90.     3
  91.     9 2 3
  92.     8 1 6
  93.     7 4 5
  94.     */
  95. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement