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

    描述:在n*n方陈里填入1,2,...,n*n,要求填成蛇形。例如n=4时方陈为:
    10 11 12  1
      9 16 13  2
      8 15 14  3
      7  6    5  4

    思路:若输入n=4,则矩阵中最大为4*4 = 16.   填数时,应该在最右上角位置开始,也就是第0行,第n-1列开始。列不变行向下到底端,  行不变列向左到边界,  列不变行向上到边界,  行不变列增加到已被赋值的数, 列不变行向下到已被赋值的数。。。。一直循环按此规律循环。。直到元素值比n*n大

    下面代码外循环控制整体需要结束的条件,  4个内循环分别的功能是向下,向左,向上,向右,在具体循环的时候,每次都是先判断在执行,先试探下一个元素是否没有越边界或是否无值,才能继续向下,否则进入下一个while循环,变换方向。

     1 #include<iostream>    
     2 
     3 using namespace std;
     4 #define MAXN 10
     5 int a[MAXN][MAXN];
     6 int main()
     7 {
     8     int n, x, y, tot = 0;
     9     cin >> n;
    10     x = 0;
    11     y = n - 1;
    12     tot=a[x][y] = 1;
    13     while (tot < n*n) {
    14         while (x + 1 < n && !a[x + 1][y]) a[++x][y] = ++tot;
    15         while (y - 1 >= 0 && !a[x][y - 1])a[x][--y] = ++tot;
    16         while (x - 1 >= 0 && !a[x - 1][y])a[--x][y] = ++tot;
    17         while (y + 1 < n && !a[x][y + 1])a[x][++y] = ++tot;
    18     }
    19     for (x = 0; x < n; x++) {
    20         for (y = 0; y < n; y++) {
    21             printf("%3d", a[x][y]);
    22         }
    23         cout << endl;
    24     }
    25 
    26     system("pause");
    27 }

    类似问题,蛇形矩阵

    1 3 6 10 15

    2 5 9 14

    4 8 13

    7 12

    11

     1 #include<iostream>    
     2 
     3 using namespace std;
     4 #define MAXN 10
     5 int a[MAXN][MAXN];
     6 int main()
     7 {
     8     int n;
     9     int i = 1;
    10     int x = 1, y = 0;
    11     int c = 1;
    12     a[0][0] = 1;
    13     cin >> n;
    14 
    15     while (i < n) {
    16         x = i;
    17         y = 0;
    18         while (y <= i) {
    19             a[x--][y++] = ++c;
    20         }
    21         i++;
    22     }
    23     for (i = 0; i < n; i++) {
    24         for (int j = 0; j < n - i; j++)
    25             printf("%5d", a[i][j]);
    26         cout << endl;
    27     }
    28 
    29     system("pause");
    30 }

    参考 https://blog.csdn.net/qq_36238595/article/details/53537672

  • 相关阅读:
    1、使用Xcode修改iOS项目工程名和路径名
    ios 里如何处理四舍五入的问题
    ios app 开发中ipa重新签名步骤介绍
    如何重新签名ipa文件
    最近研究xcodebuild批量打包的一些心得
    C#Timer
    插座断电提醒(测试阶段)
    C#MessageBox 自动关闭窗口
    插座继电器测试
    C# TCPListener
  • 原文地址:https://www.cnblogs.com/ll-10/p/9574279.html
Copyright © 2011-2022 走看看