1160 蛇形矩陣
阿新 • • 發佈:2017-10-08
逆時針 題目 == -h input std esp iostream output
題目描述 Description
小明玩一個數字遊戲,取個n行n列數字矩陣(其中n為不超過100的奇數),數字的填補方法為:在矩陣中心從1開始以逆時針方向繞行,逐圈擴大,直到n行n列填滿數字,請輸出該n行n列正方形矩陣以及其的對角線數字之和.
輸入描述 Input Descriptionn(即n行n列)
輸出描述 Output Descriptionn+1行,n行為組成的矩陣,最後一行為對角線數字之和
樣例輸入 Sample Input3
樣例輸出 Sample Output5 4 3
6 1 2
7 8 9
25
#include<iostream> usingnamespace std; class pos { public: int x; int y; }; int a[105][105] = { 0 }; int main() { pos p[4]; p[0].x = -1; p[0].y = 0; p[1].x = 0; p[1].y = -1; p[2].x = 1; p[2].y = 0; p[3].x = 0; p[3].y = 1; int T, t, x, y; cin >> T; int sum = T*T; t= 0; x = T; y = T; a[T][T] = sum--; for (; sum > 0; sum--) { if (a[x + p[t % 4].x][y + p[t % 4].y] == 0 && x + p[t % 4].x > 0 && x + p[t % 4].x <= T && y + p[t % 4].y > 0 && y + p[t % 4].y <= T ) a[x += p[t % 4].x][y += p[t % 4].y] = sum; else { t++; a[x += p[t % 4].x][y += p[t % 4].y] = sum; } } for (int i = 1; i <= T; i++) { for (int j = 1; j <= T; j++) cout << a[j][i]<<" "; cout << endl; } for (int i = 1; i <= T; i++) sum += a[i][i]+a[i][T-i]; cout << sum << endl; return 0; }
1160 蛇形矩陣