3 5 8 13
4 9 12 14
10 11 15 16
时间紧 算法不怎么好。基本功能可以实现自己改下
#include <stdio.h>
#define N 4
int a[N*2][N*2];
void main()
{ int i,j;
int m;
int flag;
for(i=0;i<2*N;i++)
for(j=0;j<2*N;j++)
a[i][j]=0;
i=0,j=0;
a[i][j++]=1;
for(m=2;m<=N*N;m++)
{ if(i>=N||j>=N) m--;
a[i][j]=m;
if(i==0)
{
flag=-1;
if(a[j][i])
{
j-=flag;
continue;
}
}
else if(j==0)
{
flag=1;
if(a[j][i])
{
i+=flag;
continue;
}
}
i-=flag;
j+=flag;
}
for(i=0;i<N;i++)
{
for(j=0;j<N;j++)
printf("%4d",a[i][j]);
printf("\n");
}
}
我的:
#include<stdio.h>
#include<math.h>
/*特别为你写的,在Win-TC下调试编译通过*/
int main(void) {
int n,i,k,w=1,v=1,t=1,e=1,f;
scanf("%d",&n);
f=sqrt(n);
n/=2;
for(i=1;i<=f;i++) {
if(e>n) break;
(i%2) ? w=1,v=t : (w=t,v=1);
for(k=1;k<=t;k++) {
gotoxy(w*3,v);
printf("%d",e);
gotoxy((f-w+1)*3,f-v+1);
printf("%d",n*2-e+1+f%2);
e++;
if(e>n) break;
(i%2) ? w++,v-- : (w--,v++);
}
t++;
}
if(f%2) {
gotoxy((f/2+1)*3,f/2+1);
printf("%d",n+1);
}
getch();
}