题解 | #回型矩阵#
回型矩阵
https://www.nowcoder.com/practice/36d5dfddc22c4f5b88a5b2a9de7db343
#include <stdio.h>
//回型数组
int main() {
int a;
scanf("%d", &a);
int arr[20][20] = { 0 };
int i = 0;
int j = 0;
int k = 1;
int i_ = 0;
int j_ = 0;
while (k <= a * a) {
//当j_为0并且i_为0 的时候 列数增加
if (j_ == 0 && i_ == 0) {
arr[i][j] = k++;
j++;
if (j == a || arr[i][j] != 0) {
j_ = 1;/*当到最右边了 或者 下一个位置有数字了 将j_设置为1 不让它继续以这种方式增加*/
j--;/*因为先j++再判断的 所以 判断为真后 要在减回去*/
i++;/*i++意思是这一列的下一行*/
}
}//当i_为0 的时候 行数增加
else if (i_ == 0 ) {
arr[i][j] = k++;
i++;
if (i == a || arr[i][j] != 0) {
i_ = 1;/*当到最下面了 或者 下一个位置有数字了 将i_设为 1 不让它继续以这种方式增加*/
i--;/*因为先i++再判断的 所以 判断为真后 要在减回去*/
j--;/*这一行的前一列*/
}
}//当j_为1的时候 列数减少
else if (j_ == 1) {
arr[i][j] = k++;
j--;
if (j == -1 || arr[i][j] != 0) {
j_ = 0;/*当到最左边了 或 下一个位置有数字 将j_设置为0 不让它继续以这种方式减少*/
j++;/*因为先j--再判断的 所以 判断为真后 要在加回去*/
i--;/*这一列的前一行*/
}
} else if (i_ == 1) {
arr[i][j] = k++;
i--;
if (i == -1 || arr[i][j] != 0) {
i_ = 0;/*当到最上边了 或 下一个位置有数字 将i_设置为0 不让它继续以这种方式减少*/
i++;/*因为先i--再判断的 所以 判断为真后 要在加回去*/
j++;/*这一行的下一列*/
}
}
}
for (i = 0; i < a; i++) {
for (j = 0; j < a; j++) {
printf("%d ", arr[i][j]);
}
printf("\n");
}
return 0;
}
查看15道真题和解析