文章
2
粉丝
405
获赞
7
访问
21.4k
由于个人能力不足,用最笨的方法解决问题。本方法解题关键在于找规律。
首先根据n确定圈数,在每一圈中分为四个赋值部分,即最左最下最右和最上。
k控制变量,i控制行,j控制列,w控制赋值。
规律得出行与列的变化均与圈数k有关。
在代码中基本已给出注释。
#include<stdio.h>
int main(){
int n;
int a[21][21];
scanf("%d",&n);
int w=1;
if(n%2==1) a[n/2+1][n/2+1]=n*n;//奇数时,给中心元素赋值
for(int k=1;k<=n/2;k++){//n/2为圈数,中心元素提前赋值不算一圈
for(int i=k;i<=n-k+1;i++){//往下
a[i][k]=w++;
}
for(int j=k+1;j<=n-k+1;j++){//往右
a[n-k+1][j]=w++;
}
for(int i=n-k;i>=k;i--){//往上
a[i][n-k+1]=w++;
}
for(int j=n-k;j>=k+1;j--){//往左
a[k][j]=w++;
}
}
for(int i=1;i<=n;i++){//输出
for(int j=1;j<=n;j++){
printf("%-3d ",a[i][j]);//注意输出格式3为宽度 -为左对齐 后还有一个空格
}//n最高为20,中心元素为400,数组元素最长三位,多一位空格 也可“%-4d”
printf("\n");
}
return 0;
}
登录后发布评论
暂无评论,来抢沙发