【发现有趣的题目】【数组】c语言写螺旋方阵

大一学编程,步骤是循环,数组,函数,指针。

螺旋方阵的题至少需要用到循环,镶嵌混线,数组的知识。

第一年学c语言,用我学了三个月的知识写出了一个螺旋方阵的解法。写的时候有查了一下网上的版本。发现没有一样的,来分享一下我的办法。

线代最近也在学矩阵。这道题用 i 表示行,用 c 表示列。

比如5*5的方阵

1   2   3   4   5

16 17 18 19 6

15 24 25 20 7

14 23 22 21 8

13 12 11 10 9

从a【0】【0】开始,第一圈,先是行不变,列递加。加到五列的话。(i和c是从零开始,代码中显示的是4)就停止。

列不变,行递增。也递加到五。行不变,列递减。列不变,行递减。

也就是每一圈会有右下左上四个动作。

第二圈也是如此。但是会发现数字有些变化。这和圈数有关系,只要找到这个关系列出来就可以。

以下是我写的源代码


#include<stdio.h>
int main()
{
	int a[10][10];
	int i,c,n,m,k;

  scanf("%d",&n);            //如果n=5 
  i=0;c=0;
  m=1;
  for(k=1;k<=n/2+1;k++){
  	for(;c<=n-k;c++){        //c<=4,c<=3
  	  a[i][c]=m;
  	  m++;
		}
		  c=c-1;
		  m-=1;
  	  if(m==n*n+1){
			  break; }
  	for(;i<=n-k;i++){        //i<=4,i<=3
  		a[i][c]=m;
			m++; 
		}  
		  m-=1;
		  i=i-1;
		  if(m==n*n+1){
			  break; }
		for(i==c;c>=k-1;c--){    //c>=0,c>=1.
			a[i][c]=m;
			m++;
		}
		  m-=1;
		  c=c+1;
		  if(m==n*n+1){
			  break; }
		for(;i>=k;i--){        //i>=1,i>=2
			a[i][c]=m;
			m++;
		}
		  m-=1;
		  i=i+1;
		  if(m==n*n+1){
			  break; }
	}
	
	
	for(i=0;i<n;i++){
		for(c=0;c<n;c++){
			printf("%2d ",a[i][c]);
		}
		printf("\n");
	}
	
	return 0;
}
  	

每一个方向完了之后,下次转拐角会覆盖,所以m-1,这个方法我觉得很笨拙,而且代码也大的很长,一点都不简练。如果有大佬偶尔看到我的文。希望能不辞辛劳帮我改改。这对我的帮助很大。谢谢观看。
      

猜你喜欢

转载自blog.csdn.net/gelly_/article/details/120897128