文章

2

粉丝

405

获赞

7

访问

21.4k

头像
无题.
P1216 福州大学2018年机试题
发布于2020年3月26日 21:03
阅读数 13.2k

 由于个人能力不足,用最笨的方法解决问题。本方法解题关键在于找规律。

首先根据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;
} 

 

登录查看完整内容


登录后发布评论

暂无评论,来抢沙发