zoukankan      html  css  js  c++  java
  • nyoj 33-蛇形填数 (循环,模拟)

    33-蛇形填数


    内存限制:64MB 时间限制:3000ms Special Judge: No
    accepted:15 submit:38

    题目描述:

    在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的值。(n<=100)

    输出描述:

    输出结果是蛇形方陈。

    样例输入:

    3

    样例输出:

    7 8 1
    6 9 2
    5 4 3

    提示:

    没有提示哦
     
    分析:
      ①、考虑如何从A[1][n]模拟蛇形数字的填写过程
      ②、首先来说数字的填写过程是     下--> 左--> 上--> 右 ... 组成的循环
      
      PS:最气的是行列个数n都还没有的到就在用 ::>_<::
     
    核心代码:
      
     1 while(nn < cnt)
     2 {
     3     while(I < n && !my_map[I + 1][J])
     4         my_map[++ I][J] = ++ cnt;
     5     while(J > 1 && my_map[I][J - 1])
     6         my_map[I][-- J] = ++ cnt;
     7     while(I > 1 && my_map[I - 1][J])
     8         my_map[-- I][J] = ++ cnt;
     9     while(J < n && my_map[I][J - 1])
    10         my_map[I][-- J] = ++ cnt;
    11 }

    C/C++代码实现(AC):

     1 #include <iostream>
     2 #include <algorithm>
     3 #include <cstring>
     4 #include <cstdio>
     5 #include <cmath>
     6 #include <stack>
     7 #include <map>
     8 #include <queue>
     9 #include <set>
    10 
    11 using namespace std;
    12 const int MAXN = 105;
    13 
    14 int main()
    15 {
    16 
    17     int n, nn, my_map[MAXN][MAXN] = {0}, I = 1, J;
    18     int cnt = 1;
    19     scanf("%d", &n);
    20     J = n, nn = n * n, my_map[1][n] = 1;
    21     while(cnt < nn)
    22     {
    23         while(I < n && !my_map[I + 1][J])
    24             my_map[++ I][J] = ++ cnt;
    25         while(J > 1 && !my_map[I][J - 1])
    26             my_map[I][-- J] = ++ cnt;
    27         while(I > 1 && !my_map[I - 1][J])
    28             my_map[-- I][J] = ++ cnt;
    29         while(J < n && !my_map[I][J + 1])
    30             my_map[I][++ J] = ++ cnt;
    31     }
    32     for(int i = 1; i <= n; ++ i)
    33     {
    34         for(int j = 1; j < n; ++ j)
    35             printf("%d ", my_map[i][j]);
    36         printf("%d
    ", my_map[i][n]);
    37     }
    38     return 0;
    39 }
      
  • 相关阅读:
    用 Flask 来写个轻博客
    Django 博客开发教程目录索引
    动态规划问题
    Java课程目录
    React&Vue
    Node.js
    Chrome Input框老是有输入记录的终极解决方案
    php中&运算符的理解与使用
    服务器压测、并发数、配置与资源消耗的关系研究
    定时任务被执行两遍,如何处理?
  • 原文地址:https://www.cnblogs.com/GetcharZp/p/9069768.html
Copyright © 2011-2022 走看看