zoukankan      html  css  js  c++  java
  • POJ3752 字母旋转游戏【水题】

    问题链接:POJ3752 字母旋转游戏

    问题描述参见上文。

    问题分析:直接模拟,需要解决二维数组遍历和下标计算。对于输入的m和n,不知道其范围,需要一个动态的存储。

    程序说明:使用vector实现一个动态的二维数组matrix[][],是一个非常有效的做法。定义数组的代码中包含了数组的初始化。

    计算下一个字符,计算下一个坐标的逻辑是套路。

    还需要注意的是,按照题意需要输出3个空格来隔开字母,不然就会出现格式错误。

    AC的C++语言程序如下:

    /* POJ3752 字母旋转游戏 */
    
    #include <iostream>
    #include <vector>
    
    using namespace std;
    
    const int ARROWS = 4;
    const int RIGHT = 0;
    const int DOWN = 1;
    const int LEFT = 2;
    const int UP = 3;
    
    int main()
    {
        int m, n;
    
        // 输入数据
        cin >> m >> n;
    
        vector<vector<char> > matrix(m, vector<char>(n, ' '));
    
        // 填充处理
        int arrow = RIGHT, row = 0, col = 0;
        char c = 'A';
        for(int i=1; i<=m*n; i++) {
            matrix[row][col] = c;
    
            // 计算下一个字母
            if(++c > 'Z')
                c = 'A';
    
            // 计算下一个位置
            if(arrow == RIGHT) {
                if(col + 1 == n) {
                    row++;
                    arrow = (arrow + 1) % ARROWS;
                } else if(matrix[row][col+1] != ' ') {
                    row++;
                    arrow = (arrow + 1) % ARROWS;
                } else
                    col++;
            } else if(arrow == DOWN) {
                if(row + 1 == m) {
                    col--;
                    arrow = (arrow + 1) % ARROWS;
                } else if(matrix[row+1][col] != ' ') {
                    col--;
                    arrow = (arrow + 1) % ARROWS;
                } else
                    row++;
            } else if(arrow == LEFT) {
                if(col == 0) {
                    row--;
                    arrow = (arrow + 1) % ARROWS;
                } else if(matrix[row][col-1] != ' ') {
                    row--;
                    arrow = (arrow + 1) % ARROWS;
                } else
                    col--;
            } else if(arrow == UP) {
                if(row == 0) {
                    col++;
                    arrow = (arrow + 1) % ARROWS;
                } else if(matrix[row-1][col] != ' ') {
                    col++;
                    arrow = (arrow + 1) % ARROWS;
                } else
                    row--;
            }
        }
    
        // 输出结果
        for(int i=0; i<m; i++) {
            for(int j=0; j<n; j++)
                cout << "   " << matrix[i][j];
            cout << endl;
        }
    
        return 0;
    }


  • 相关阅读:
    nexus 安装与启动(windows本版)
    linux 安装 mysql8
    02、linux 常用指令
    linux 安装tomcat8
    CentOS7使用firewalld打开关闭防火墙与端口
    03、linux 安装jdk
    rabbit mq的使用
    跨域与同源策略
    JDK1.8新特性04--Optional处理空指针问题
    HttpAsyncClient异步调用
  • 原文地址:https://www.cnblogs.com/tigerisland/p/7564065.html
Copyright © 2011-2022 走看看