1. 程式人生 > >1160 蛇形矩陣

1160 蛇形矩陣

逆時針 題目 == -h input std esp iostream output

題目描述 Description

小明玩一個數字遊戲,取個n行n列數字矩陣(其中n為不超過100的奇數),數字的填補方法為:在矩陣中心從1開始以逆時針方向繞行,逐圈擴大,直到n行n列填滿數字,請輸出該n行n列正方形矩陣以及其的對角線數字之和.

輸入描述 Input Description

n(即n行n列)

輸出描述 Output Description

n+1行,n行為組成的矩陣,最後一行為對角線數字之和

樣例輸入 Sample Input

3

樣例輸出 Sample Output

5 4 3
6 1 2
7 8 9
25

通過一個結構體來控制方向,從最底層開始填充:
#include<iostream>
using
namespace 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 蛇形矩陣