zoukankan      html  css  js  c++  java
  • 蛇形填数

    题目描述:
    给定一个 n , 在  n * n 的方阵中填入 1 ,2, 3,……,n * n,  要求填成蛇形。
    例如在 n = 5 时 , 如下所示:
    13   14   15   16   1
    12   23   24   17   2
    11   22   25   18   3
    10   21   20   19   4
      9     8     7     6   5
     
    思路如下:
    涉及到行与列,用二维数组解这道题。首先将坐标写出(x,y),将二维数组初始化全部成0,方便判断移动时是否越界。
    第一个坐标位置为(0,n-1),即第0行,第n-1列。蛇形数如果N=5时,先是下下下下、左左左左、上上上上、右右右、
    下下下、左左、上上、右、下即可完成蛇形填数。总之先是下,到不能填为止,然后是左、上、右。不能填即指再移动
    就出界或下一个值非0。
     
     1 #include <stdio.h>
     2 #include <string.h>
     3 #define maxn 20
     4 int main()
     5 {
     6     int a[maxn][maxn];
     7     int n;
     8     int x,y;
     9     int total=0;
    10     printf("input a number:");
    11     scanf("%d",&n);
    12     memset(a,0,sizeof(a)); //将二维数组初始化为0
    13     total=a[x=0][y=n-1]=1;
    14     
    15     while (total<n*n)
    16     {
    17         while (x+1<n&&!a[x+1][y]) //x+1判断下一步移动是否越界
    18         {
    19             a[++x][y]=++total;  // ++total;++x;a[x][y]=total;
    20         }
    21         while (y-1>=0&&!a[x][y-1])
    22         {
    23             a[x][--y]=++total;
    24         }
    25         while (x-1>=0&&!a[x-1][y])
    26         {
    27             a[--x][y]=++total;
    28         }
    29         while (y+1<n&&!a[x][y+1])
    30         {
    31         a[x][++y]=++total;
    32         }
    33     }   
    34     for (int x = 0; x <n; x++)
    35     {
    36         for ( y = 0; y<n; y++)
    37         {
    38             printf("%3d",a[x][y]);
    39         }
    40         printf("
    ");
    41     }
    42     
    43         return 0;
    44 }

  • 相关阅读:
    直播平台的相关技术(转载)
    各种排序算法分析总结(待整理))
    算法:60.第k个排列
    三种随机化算法:舍伍德算法 拉斯维加斯算法 蒙特卡洛算法
    随机化算法之随机数
    caffe调试
    Euclideanloss_layer层解析
    布线问题(分支限界法)
    最大堆和最小堆
    机器学习知识框架
  • 原文地址:https://www.cnblogs.com/A-rcy/p/11543943.html
Copyright © 2011-2022 走看看