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

    字母旋转游戏

    时间限制: 1000ms 内存限制: 65535KB

    通过次数: 2总提交次数: 5

    问题描述
    给定两个整数M,N,生成一个M*N的矩阵,矩阵中元素取值为A至Z的26个字母中的一个,A在左上角,其余各数按顺时针方向旋转前进,依次递增放置,当超过26时又从A开始填充。例如,当M=5,N=8时,矩阵中的内容如下:
       A   B   C   D   E   F   G   H
    
       V   W   X   Y   Z   A   B   I
    
       U   J   K   L   M   N   C   J
    
       T   I   H   G   F   E   D   K
    
       S   R   Q   P   O   N   M   L
    输入描述
    M为行数,N为列数,其中M,N都为大于0的整数。
    输出描述
    分行输出相应的结果
    样例输入
    4 9
    样例输出
       A   B   C   D   E   F   G   H   I
       V   W   X   Y   Z   A   B   C   J
       U   J   I   H   G   F   E   D   K
       T   S   R   Q   P   O   N   M   L
    来源
    POJ

    问题分析:(略)

    这个问题和《POJ3752 字母旋转游戏【水题】》是同一个问题,代码拿过来用就AC了。

    程序说明:参见参考链接。

    参考链接:POJ3752 字母旋转游戏【水题】

    题记:程序做多了,不定哪天遇见似曾相识的。

    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;
    }





  • 相关阅读:
    日期间隔之年、月、日、时、分、秒
    加减年、月、日、时、分、秒
    求总和的百分比
    返回最值所在行数据
    返回各部门工资排名前三位的员工
    生成累计和
    将字符和数字数据分离
    从字符串中删除不需要的字符
    计算字符在字符串中出现的次数
    字符串文字中包含引号
  • 原文地址:https://www.cnblogs.com/tigerisland/p/7563674.html
Copyright © 2011-2022 走看看