3 5 8 13
4 9 12 14
10 11 15 16
 2006-12-19 20:33
	    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 21:54
   2006-12-19 22:22
	    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
	    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:23
   2006-12-21 20:33
	    2006-12-21 20:33
  
 2006-12-21 20:36
	    2006-12-21 20:36
  累不累啊?!四个printf不就出来了!哈哈!而且不会出错哈哈!
 2006-12-21 20:43
	    2006-12-21 20:43
  累不累啊?!四个printf不就出来了!哈哈!而且不会出错哈哈!
算法...........
如果是5*5的如何?100*100的呢?你能依次定义数组存储吗?那空间与时间都花不来.

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