3 5 8 13
4 9 12 14
10 11 15 16
2006-12-19 20:33
时间紧 算法不怎么好。基本功能可以实现自己改下
#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");
}
}
2006-12-19 21:54
2006-12-19 22:22
/*左上部分*/
for(i=1;i<=4;i++)
{
if(i%2==1){
j=i;
k=1;
while(j>=1&&k<=4)
{
a[j][k]=s++;
//printf("*%d,%d,%d\n",j,k,s-1);
j--;
k++;
}
}
else
{j=1;k=i;
while(j<=4&&k>=1)
{
a[j][k]=s++;
//printf("**%d,%d,%d\n",j,k,s-1);
j++;
k--;
}
}
}

2006-12-19 22:43
我的:
#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();
}

2006-12-21 20:23
2006-12-21 20:33

2006-12-21 20:36
累不累啊?!四个printf不就出来了!哈哈!而且不会出错哈哈!
2006-12-21 20:43
累不累啊?!四个printf不就出来了!哈哈!而且不会出错哈哈!
算法...........
如果是5*5的如何?100*100的呢?你能依次定义数组存储吗?那空间与时间都花不来.

2006-12-21 20:49
不同的情况当然不同处理,我只是这么说。代码不就讲求易读,效率。。。嘛!何况这个题的最终目的就是输出啊!
有些东西确实需要了解它的算法和思路。但如果相当简单的东西还是应该怎么实用怎么做啦!
2006-12-21 21:02