std 方向 can 方法 main head pan num
题目描述 Description小明玩一个数字游戏,取个 n 行 n 列数字矩阵(其中 n 为不超过 100 的奇数),数字的填补方法为:在矩阵中心从 1 开始以逆时针方向绕行,逐圈扩大,直到 n 行 n 列填满数字,请输出该 n 行 n 列正方形矩阵以及其的对角线数字之和.
输入描述 Input Descriptionn(即 n 行 n 列)
输出描述 Output Descriptionn+1 行,n 行为组成的矩阵,最后一行为对角线数字之和
样例输入 Sample Input3
样例输出 Sample Output5 4 36 1 27 8 925
- #include < stdio.h > #include < string.h > int main() {
- int a[110][110];
- int n,
- x,
- y,
- tot,
- num = 0;
- scanf("%d", &n);
- memset(a, 0, sizeof(a));
- tot = n * n;
- a[x = n - 1][y = n] = n * n;
- while (tot > 0) {
- while (y - 1 >= 0 && !a[x][y - 1]) a[x][--y] = --tot;
- while (x - 1 >= 0 && !a[x - 1][y]) a[--x][y] = --tot;
- while (y + 1 < n && !a[x][y + 1]) a[x][++y] = --tot;
- while (x + 1 < n && !a[x + 1][y]) a[++x][y] = --tot;
- }
- for (x = 0; x < n; x++) {
- for (y = 0; y < n; y++) printf("%d ", a[x][y] + 1);
- printf("\n");
- }
- for (x = 0; x < n; x++) for (y = 0; y < n; y++) {
- if (x == y || x + y == n - 1) num += a[x][y] + 1;
- }
- printf("%d\n", num);
- return 0;
- }
codevs1160 蛇形矩阵
来源: http://www.bubuko.com/infodetail-2133016.html