扫一扫,加我们为好友有惊喜哦~
-->

核心课程
开班动态
专题服务

您当前所在位置:首页 > 中心动态 >>
蛇形矩阵的求解——常州电脑培训

一道经典计算题,大家试试吧!

蛇形矩阵:生成一个按蛇形方式排列自然数12345,……,N2(1<N10)阶方阵。例如:

输入:N=4                         N=7

输出:1   3    4   10               1    3    4   10   11   21   22

           2   5    9   11               2    5    9   12   20   23   34

           6   8   12   15               6    8   13   19   24   33   35

           7   13  14   16               7   14   18   25   32   36   43

                                        15   17   26   31   37   42   44

                                        16   27   30   38   41   45   48

                                        28   29   39   40   46   47   49

[]本题考查重点是矩阵的表示及

    上下标运算,旨在培养观察和

    分析思维能力。

        例如,当N=7 时,把1

    23,……,49逐一填入数组

    A中,搜索填数的方向如右图示:

 

    从图中,我们可以看出:对每个数字m12,……,~N*N)来说,可能按以下四种搜索方向之一填数:

                              d=2(右上)

   

                      m        d=3(向右)

           d=4       

         (左下)        d=1(向下)

    按照图10-1的搜索方向填数时,先要把当前数字m填入数组A[i,j]中,接下来就是要确定下一次的填数的坐标及其搜索方向(即d=?)。现分析如下:

    第一种情形d=1,如m=2,7,153544):

              ij

            d=1        d=2(j=1)

              i+1j

               

                d=4(j=N)

    第二种情形d=2,如m=2,10,21;或34,43,48;或7,8,9,16,17,18,19等):

                    d=2(i<>1j<>N)

                 

             i-1j     d=3(i=1)

               

          d=2       d=1(j=N)

          (ij)

    第三种情形d=3,如m=29,40,47;4,11,22):

                    d=3          d=2(i=N)

             ij     (ij+1)

               

                     d=4(j=N)

    第四种情形d=4,如m=28,39,46;6,15;或5,12,13,14等):

                     (ij)

                      d=4

              i+1j     d=3(i=1)

               

                d=4(i=Nj<>1)

 

[程序]

Program she;

const max=10;

var d,i,j,m,N:integer;

  A:array [1..10,1..10] of integer;

begin

  write('N=');readln(N);

  if (N>=1) and (N<=max) then

    begin i:=1;j:=1;m:=1;d:=1;

      repeat A[i,j]:=m;   {填数}

        case d of

          1: {第一种情形}begin i:=i+1; if j=1 then d:=2 else d:=4; end;

          2: {第二种情形}begin i:=i-1;j:=j+1;

if j=N then d:=1 else if i=1 then d:=3;end;

          3: {第三种情形}begin j:=j+1; if i=N then d:=2 else d:=4;end;

          4: {第三种情形}begin i:=i+1;j:=j-1;

if i=N then d:=3 else if j=1 then d:=1;end;

        end;

        m:=m+1;

      until m>N*N;

      writeln('OUTPUT:');

      for i:=1 to N do begin for j:=1 to N do write(A[i,j]:4); {输出填数} writeln;end;

    end

  else writeln('Input N error!');

end.

更多精彩请关注,常州Java培训人人小站:

蛇形矩阵:生成一个按蛇形方式排列自然数12345,……,N2(1<N10)阶方阵。例如:

输入:N=4                         N=7

输出:1   3    4   10               1    3    4   10   11   21   22

           2   5    9   11               2    5    9   12   20   23   34

           6   8   12   15               6    8   13   19   24   33   35

           7   13  14   16               7   14   18   25   32   36   43

                                        15   17   26   31   37   42   44

                                        16   27   30   38   41   45   48

                                        28   29   39   40   46   47   49

[]本题考查重点是矩阵的表示及

    上下标运算,旨在培养观察和

    分析思维能力。

        例如,当N=7 时,把1

    23,……,49逐一填入数组

    A中,搜索填数的方向如右图示:

 

    从图中,我们可以看出:对每个数字m12,……,~N*N)来说,可能按以下四种搜索方向之一填数:

                              d=2(右上)

   

                      m        d=3(向右)

           d=4       

         (左下)        d=1(向下)

    按照图10-1的搜索方向填数时,先要把当前数字m填入数组A[i,j]中,接下来就是要确定下一次的填数的坐标及其搜索方向(即d=?)。现分析如下:

    第一种情形d=1,如m=2,7,153544):

              ij

            d=1        d=2(j=1)

              i+1j

               

                d=4(j=N)

    第二种情形d=2,如m=2,10,21;或34,43,48;或7,8,9,16,17,18,19等):

                    d=2(i<>1j<>N)

                 

             i-1j     d=3(i=1)

               

          d=2       d=1(j=N)

          (ij)

    第三种情形d=3,如m=29,40,47;4,11,22):

                    d=3          d=2(i=N)

             ij     (ij+1)

               

                     d=4(j=N)

    第四种情形d=4,如m=28,39,46;6,15;或5,12,13,14等):

                     (ij)

                      d=4

              i+1j     d=3(i=1)

               

                d=4(i=Nj<>1)

 

[程序]

Program she;

const max=10;

var d,i,j,m,N:integer;

  A:array [1..10,1..10] of integer;

begin

  write('N=');readln(N);

  if (N>=1) and (N<=max) then

    begin i:=1;j:=1;m:=1;d:=1;

      repeat A[i,j]:=m;   {填数}

        case d of

          1: {第一种情形}begin i:=i+1; if j=1 then d:=2 else d:=4; end;

          2: {第二种情形}begin i:=i-1;j:=j+1;

if j=N then d:=1 else if i=1 then d:=3;end;

          3: {第三种情形}begin j:=j+1; if i=N then d:=2 else d:=4;end;

          4: {第三种情形}begin i:=i+1;j:=j-1;

if i=N then d:=3 else if j=1 then d:=1;end;

        end;

        m:=m+1;

      until m>N*N;

      writeln('OUTPUT:');

      for i:=1 to N do begin for j:=1 to N do write(A[i,j]:4); {输出填数} writeln;end;

    end

  else writeln('Input N error!');

end.

更多精彩,请关注常州Java培训人人小站:http://zhan.renren.com/javaedu



返回顶部