直接写屏的方法输出有规律的数字方阵

  • 来源: 编程中国 作者: 若水   2008-05-07/14:39
  • 有许多算法问题是关于数字方阵的,多数通用的算法是计算规律和数据并排着输出
    而本例是用直接写屏方法输出,它的方法不再是计算数据与规律,而是计算数据位置,"跳"着输出数据

    最近很忙,因此算法思想就不写了,大家自己领悟:)

    以下是用直接写屏的方法输出有规律的数字方阵的一些例子
    Write By S.K
    */

    /*  写屏添数法 一
    输出字轮转组成一正方形,已n作为边长,比如:

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

    n=5:
    1 16 15 14 13
    2 17 24 23 12
    3 18 25 22 11
    4 19 20 21 10
    5  6  7  8  9
    */

    /*Write By S.K*/
    #include"stdio.h"
    int main(void)
    {
      int n,i,k,s=0,z=1,x=1,y=1;
      scanf("%d",&n);
      for(i=0;i<2*n-1;i++)
      {
        for(k=0;k<n-1-s;k++)
        {
          gotoxy(x*3,y);
          printf("%d",z);
          z++;
          switch(i%4)
          {
            case 0: y++; break;
            case 1: x++; break;
            case 2: y--; break;
            case 3: x--;
          }
        }
        if(i%4==3) { x++; y++; s+=2;}
      }
      gotoxy(x*3,y);
      printf("%d",z);
      getch();
    }

    /*写屏添数法 二
    写屏输出如下数字排列:
    n=3:
    1  2  6
    3  5  7
    4  8  9
    n=4:
    1  2  6  7
    3  5  8  13
    4  9  12 14
    10 11 15 16
    n=5:
    1  2  6  7  15
    3  5  8  14 16
    4  9  13 17 22
    10 12 18 21 23
    11 19 20 24 25
    n=6:
    1  2  6  7  15 16
    3  5  8  14 17 26
    4  9  13 18 25 27
    10 12 19 24 28 33
    11 20 23 29 32 34
    21 22 30 31 35 36

    .......

    读入n,输出数字方阵
    */

    /*Write By S.K*/
    #include<stdio.h>
    #include<math.h>
    int main(void)
    {
      int n,i,k,w=1,v=1,t=1,e=1,f;
      scanf("%d",&n);
      f=n;
      n=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();
    }

     

     


    评论 {{userinfo.comments}}

    {{money}}

    {{question.question}}

    A {{question.A}}
    B {{question.B}}
    C {{question.C}}
    D {{question.D}}
    提交

    驱动号 更多