StoneHaos

Untitled

Mar 30th, 2020
137
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #include <stdio.h>
  2. #include <time.h>
  3. #include <stdlib.h>
  4. #include <algorithm>
  5. #include <locale.h>
  6.  
  7. using namespace std;
  8.  
  9. const int n=11;
  10. int arr[n][n];
  11.  
  12. int main(void) {
  13.     int x = n / 2;
  14.     int y = x;
  15.     int elem = 1, cnt = 1;
  16.     while (true) {
  17.         if (cnt % 2 == 1) {
  18.             int i = y;
  19.             int end = max(0, i-cnt);
  20.             bool flag = ((i-cnt) < 0);
  21.             for (; i>end; --i) {
  22.                 arr[x][i] = elem;
  23.                 ++ elem;
  24.                 //printf("i = %d, j = %d\n", x, i);
  25.             }
  26.             if (flag) {
  27.                 arr[x][i] = elem;
  28.                 //printf("i = %d, j = %d\n", x, i);
  29.                 break;
  30.             }
  31.             y = i;
  32.             i = x;
  33.             end = max(0, i-cnt);
  34.             flag = ((i-cnt) < 0);
  35.             for (; i>end; --i) {
  36.                 arr[i][y] = elem;
  37.                 ++ elem;
  38.                 //printf("i = %d, j = %d\n", i, y);
  39.             }
  40.             if (flag) {
  41.                 arr[i][y] = elem;
  42.                 //printf("i = %d, j = %d\n", i, y);
  43.                 break;
  44.             }
  45.             x = i;
  46.             ++ cnt;
  47.         }
  48.         else {
  49.             int i = y;
  50.             int end = min(n-1, i+cnt);
  51.             bool flag = ((i+cnt) >= n);
  52.             for (; i<end; ++i) {
  53.                 arr[x][i] = elem;
  54.                 ++ elem;
  55.                 //printf("i = %d, j = %d\n", x, i);
  56.             }
  57.             if (flag) {
  58.                 arr[x][i] = elem;
  59.                 //printf("i = %d, j = %d\n", x, i);
  60.                 break;
  61.             }
  62.             y = i;
  63.             i = x;
  64.             end = min(n-1, i+cnt);
  65.             flag = ((i+cnt) >= n);
  66.             for (; i<end; ++i) {
  67.                 arr[i][y] = elem;
  68.                 ++ elem;
  69.                 //printf("i = %d, j = %d\n", i, y);
  70.             }
  71.             if (flag) {
  72.                 arr[i][y] = elem;
  73.                 //printf("i = %d, j = %d\n", i, y);
  74.                 break;
  75.             }
  76.             x = i;
  77.             ++ cnt;
  78.         }
  79.     }
  80.     for (int i = 0; i < n; ++ i) {
  81.         for (int j = 0; j < n; ++ j)
  82.             printf("%5d ", arr[i][j]);
  83.         printf("\n");
  84.     }
  85.     return 0;
  86. }
RAW Paste Data