距阵的算法

来源:互联网 发布:触摸屏展示软件 编辑:程序博客网 时间:2024/04/27 20:15

6. 矩阵中填数. 当给出 N*N 的矩阵,要求用程序填入下列形式的数:

   ① 倒填,例如N=5             ② 蛇形填数              ③ 回转填数

 ┌─┬─┬─┬─┬─┐   ┌─┬─┬─┬─┬─┐   ┌─┬─┬─┬─┬─┐
 │25│24│23│22│21│   │ 1│ 3│ 4│10│11│   │ 1│16│15│14│13│
 ├─┼─┼─┼─┼─┤   ├─┼─┼─┼─┼─┤   ├─┼─┼─┼─┼─┤
 │20│19│18│17│16│   │ 2│ 5│ 9│12│19│   │ 2│17│24│23│12│
 ├─┼─┼─┼─┼─┤   ├─┼─┼─┼─┼─┤   ├─┼─┼─┼─┼─┤
 │15│14│13│12│11│   │ 6│ 8│13│18│20│   │ 3│18│25│22│11│
 ├─┼─┼─┼─┼─┤   ├─┼─┼─┼─┼─┤   ├─┼─┼─┼─┼─┤
 │10│ 9│ 8│ 7│ 6│   │ 7│14│17│21│24│   │ 4│19│20│21│10│
 ├─┼─┼─┼─┼─┤   ├─┼─┼─┼─┼─┤   ├─┼─┼─┼─┼─┤
 │ 5│ 4│ 3│ 2│ 1│   │15│16│22│23│25│   │ 5│ 6│ 7│ 8│ 9│
 └─┴─┴─┴─┴─┘   └─┴─┴─┴─┴─┘   └─┴─┴─┴─┴─┘


小题1:
#include <stdio.h>

int main(void)
{
 int x,y,n,count=0;
 scanf("%d",&n);
 x=y=n*n;
 for(int i=0;i<x;i++)
 {
  if(count==n)
  {
   printf("/n");
   count =0;
  }
  printf("%d ",y);
  count++;
  y--;
 }
 return 0;
}
小题2:
#include <stdio.h>

#define N 5

int main()
{
     int i=0,j=0,k,num[N][N];
     int direct=1;//为1时左下,为-1时右上
     for(k=1;k<=N*N;k++)
     {
          num[i][j]=k;
          i=i+direct;
          j=j-direct;//左下走,i+1,j-1;右上走,i-1,j+1;
          if(j<0&&i<N)
          {
              j=0;
              direct=-direct;
          }
          else if(j==N)
          {
               i=i+2;
               j=j-1;
               direct=-direct;
          }
          else if(i<0&&j<N)
          {
               i=0;
               direct=-direct;
          }
          else if(i==N)
          {
               i=i-1;
               j=j+2;
               direct=-direct;
          }
     }
     for(i=0;i<N;i++)
     {
         for(j=0;j<N;j++)
              printf("%3d",num[i][j]);
          printf("/n");
     }   
  return 0;

小题3:
#include <stdio.h>

#define N 5
int A[5][5];

int main()
{
    int i,j,x,y,z,count;
 count =N/2;
 x=0;
 y=5;
 z=1;
 A[count][count] =N*N;
      while(count>0)
   {
     for(i=x;i<y;i++)
  {
   A[i][x] =z;
   z++;
  }
  for(i=x+1;i<y;i++)
  {
   A[y-1][i] =z;
   z++;
  }
  for(i=y-2;i>x-1;i--)
  {
   A[i][y-1] =z;
   z++;
  }
  for(i=y-2;i>x;i--)
  {
   A[x][i] =z;
   z++;
  }
  x++;
  y--;
  count--;
   }
 for(i=0;i<N;i++)
  for(j=0;j<N;j++)
  {
   printf("%d ",A[i][j]);
   if(j==4)
    printf("/n");
  }
 return 0; 

原创粉丝点击