蛇形填数

来源:互联网 发布:罗马全面战争 for mac 编辑:程序博客网 时间:2024/05/22 18:23
/*本程序解决了以下几个问题:
1、利用for循环控制蛇形走向,本程序的关键所在
2、输入n,输出控制是便不能用n,n在执行过程中会发生变化,最后如何保持输出时是n次
3、绕行次数问题,偶数循环一半次,奇数循环2*n+1次*/

#include<stdio.h>
int main(void)
{
int m,n,i,j,k;
int x,y;
while(scanf("%d",&n)!=EOF)
{
int a[100][100]={0},sum=1;
x=n;
if(n%2==0)
y=n/2;  //n为偶,循环n/2次
else
y=n/2+1;  //n为奇,循环y次,或者y=(n+1)/2
for(m=0,k=1;k<=y;m++,n--,k++)  //刚开始为k<=n-2,此处控制循环次数错误,不能用n作为标准,因为k会每次变化,n又自减,相当于两方面变化
{
for(i=m,j=n-1;i<n;i++)
a[i][j]=sum++;
for(i=n-1,j=n-2;j>=m;j--)
a[i][j]=sum++;
for(i=n-2,j=m;i>=m;i--)
a[i][j]=sum++;
for(i=m,j=m+1;j<n-1;j++)
a[i][j]=sum++;
}
for(i=0;i<x;i++)
{
for(j=0;j<x;j++)
printf("  %d\t",a[i][j]);
printf("\n\n\n");
}
}
return 0;

}