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 }

  • 相关阅读:
    Coolite comboBox控件动态显示树形结构(无限树)
    WinXP 允许搜索PHP格式
    LINQ To DataSet 几个常用示例
    在Windows系统上安装PHP工作环境
    将LINQ To DataSet 传回之对象集转成DataTable的函数
    .net wsdl文件用法
    上班了,抱怨一下
    写在情人节
    快乐云南行
    单车骑天下 VS 公益旅游活动
  • 原文地址:https://www.cnblogs.com/A-rcy/p/11543943.html
Copyright © 2011-2022 走看看