大一学编程,步骤是循环,数组,函数,指针。
螺旋方阵的题至少需要用到循环,镶嵌混线,数组的知识。
第一年学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,这个方法我觉得很笨拙,而且代码也大的很长,一点都不简练。如果有大佬偶尔看到我的文。希望能不辞辛劳帮我改改。这对我的帮助很大。谢谢观看。