Run ID | 作者 | 问题 | 语言 | 测评结果 | Time | Memory | 代码长度 | 提交时间 |
---|---|---|---|---|---|---|---|---|
87538 | Kevin | 二维数组输出(3) | C++ | Accepted | 0 MS | 240 KB | 1154 | 2024-08-10 15:52:09 |
#include<stdio.h> int main() { int i = 0, j = 0;//i、j分别模拟数组的行坐标和列坐标 int N = 0, k = 1, offset = 1;//N为矩阵阶数,k为赋值变量,offset为偏移量 int arr[100][100] = { 0 };//经过测试定义太小不通过 scanf("%d", &N); int startX = 0,startY=0;//每次循环的初始行坐标和列坐标 int count = 0; if (N % 2 == 1) {//N为奇数时要单独处理最后一个元素 arr[N / 2][N / 2] = N * N; } while (count < N/2) {//循环圈数为N/2次,自己动手画一下就知道了 for (i=startX,j = startY; j < N - offset; j++) {//上行 arr[i][j] = k++; } for (i = startX; i < N - offset; i++) {//右行 arr[i][j] = k++; } for (; j > startY; j--) {//下行 arr[i][j] = k++; } for (; i > startX; i--) {//左行 arr[i][j] = k++; } //每一圈循环结束以后,要更改变量的值 count++; offset++; startX++; startY++; } //打印 for (i = 0; i < N; i++) { for (j = 0; j < N; j++) { if (j == N - 1) { printf("%d\n", arr[i][j]); } else { printf("%d ", arr[i][j]); } } } return 0; }