欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

PTA7-1 螺旋方阵(15分)

程序员文章站 2022-03-13 13:41:53
...

题目

代码博主都是亲测过的,还请大家,放心食用。先代码后解析。
PTA7-1 螺旋方阵(15分)
PTA7-1 螺旋方阵(15分)
代码:

#include<stdio.h>
#include<stdlib.h>
int main()
{
	int a[10][10],n,i,j,w1,w2,w3,w4,x=0,y=0,k=1,d=0;
	scanf("%d",&n);
	w1=n-1,w2=n-1,w3=0,w4=1;
	while(k<=n*n)
	{
		if(d==0)
		{
			a[x][y++]=k++;
			if(y==w1)
			{
				d=1;
				w1--;
			}
		}
		if(d==1)
		{
			a[x++][y]=k++;
			if(x==w2)
			{
				d=2;
				w2--;
			}
		}
		if(d==2)
		{
			a[x][y--]=k++;
			if(y==w3)
			{
				d=3;
				w3++;
			}
		}
		if(d==3)
		{
			a[x--][y]=k++;
			if(x==w4)
			{
				d=0;
				w4++;
			}
		}
	}
	for(i=0;i<n;i++)
	{
		for(j=0;j<n;j++)
			printf("%4d",a[i][j]);
		printf("\n");
	}
	return 0;
} 
  1. 首先在看这道题目的时候小伙伴们不要抓着题意去看,我们看他的输出结果。博主在看到输出结果的时候第一想法不是想办法让1~n按这种别扭的方式输出,而是按这种排列对一个二维数组赋值。之后博主会讨论直接输出的办法。
  2. 这里还是建议大家采用循环赋值的方法,也就是转着转着赋值,这样的话,我们就可以用到对数组赋值的变量k,将其设置为大循环while的循环控制。为了这样做,我们可以设置四个变量,我这里称这些变量我们为墙 即wall,所以我用w来命名这四个变量。我们可以试着在脑子里跑一下第一圈,从1~9对第一行对应的索引0到8九个位置进行赋值,接着我们的判断条件d变为1,开始对最后一列的赋值,对第y列从10到18,接着继续转,这里的x变为自减,从索引9到1进行赋值,最后我们又回到第一列,从9到2进行赋值,然后从第一列,第二行继续开始循环,思路简单。

这里我们可以尝试讨论一下其他的方法,如果我们采用对二维数组先顺序赋值的话,那么不论我们怎么操作,都会面对一个问题,即换行,换行是问题的关键,如果我们尝试其他方法,就会发现,换行问题非常大,博主目前没有其他办法解决这个问题,而且博主已经尝试过两种不同的方法了,所以要是有小伙伴有其他方法的话,还望分享给博主。ok bye~