题目
分析
用圈的思维解题,比如n=3时有一个圈,n=4时有两个圈。我们可以在每个圈的循环中将圈的4条边分别遍历一次进行赋值操作,最后得到数列并打印出来。
代码
#include <iostream>
using namespace std;
void snake(int n){
int max=n*n;
int snake[n][n];
int i,j,time,k,num;
time = n/2,k=1,num=1;
if (n%2 == 1){ //若矩阵为奇数,则将正中间的元素赋值
snake[time][time] = n*n;
}
for(;k <= time && num <= max; k++){ //k为循环次数,time为回旋的圈数
for (i=k-1; i<n-k; i++, num++)
snake[i][n-k] = num; //该圈的右列元素赋值
for (j=n-k; j>=k; j--, num++)
snake[n-k][j] = num; //该圈的下列元素赋值
for (i=n-k; i>=k; i--, num++)
snake[i][k-1] = num; //该圈的左列元素赋值
for (j=k-1; j<n-k; j++, num++)
snake[k-1][j] = num; //该圈的上列元素赋值
}
for(i=0; i<n; i++){
for(j=0 ; j<n; j++){
cout<<snake[i][j]<<" "; //打印数列
}
cout<<endl;
}
}
int main(){
int i;
cin>>i;
snake(i);
}