一道编程题,具体看问题补充

来源:百度知道 编辑:UC知道 时间:2024/05/21 11:47:48
一道编程题,大概意思是,比如有这么几个数,第一种4个数,第一行是1,2第二行是4,3,第二种有九个数,第一行是1,2,3,第二行是8,9,4,第三行是7,6,5,第三种有16个数,第一行是1,2,3,4,第二行是12,13,14,15,第三行是11,16,15,6,第四行是10,9,8,7,依此类推,写在纸上一看便明白了,在下愚钝想了很久都没想出来,在此先谢过各位了。
第二行是12,13,14,15,这个打错了,不是15是5

上面的是奇数行的话有错误 中心为0了
由于匆忙 写的不好 请多指教
#include<stdio.h>
#define N 5 /*这里写你要的行数*/

main()
{
int k=0,i=0,j=0,n,x;
int a[N+1][N+1]={0};
n=N;
while(k!=N*N)
{
for(++i,++j,x=n;x>0;x--,j++)
a[i][j]=++k;
if(k==N*N)
break;
for(j--,k--,x=n;x>0;x--,i++)
a[i][j]=++k;
for(i--,k--,x=n;x>0;x--,j--)
a[i][j]=++k;
for(j++,k--,x=n;x-1>0;x--,i--)
a[i][j]=++k;
n-=2;
}

for(i=1;i<=N;i++)
{
for(j=1;j<=N;j++)
printf("%6d",a[i][j]);
printf("\n");
}
getch();
}

12
43

123
894
765

1 2 3 4
12 13 14 5
11 16 15 6
10 9 8 7

呵呵,简单了
利用模值控制转向就可以了
我不写代码了,描述一下过程就可以,等下午我忙完了在些具体代码了(呵呵,还有东西要做)

#include<stdio.h>
#define MAX 100

void main(