• P5730 显示屏题解


    题目传递门

    一、思路总结

    1. 常量数组是解题的关键。

    2. 先打印行,再打印列是亘古不变的真理。但这里又出来一个遍历数字,如果是数字、行、列三层循环,打印出来就是竖着的。如果是行、数字、列就是正确的啦~

    3. 一个数字是(4)位,如果打印的是第(2)个,第(1)列,就是(2*4+1=9),因为下标是从(0)开始,所以就是(a[i][4 * c + k])

    二、完整代码

    #include <bits/stdc++.h>
    
    using namespace std;
    
    string a[5] =
            {"XXX...X.XXX.XXX.X.X.XXX.XXX.XXX.XXX.XXX",
             "X.X...X...X...X.X.X.X...X.....X.X.X.X.X",
             "X.X...X.XXX.XXX.XXX.XXX.XXX...X.XXX.XXX",
             "X.X...X.X.....X...X...X.X.X...X.X.X...X",
             "XXX...X.XXX.XXX...X.XXX.XXX...X.XXX.XXX"
            };
    
    int main() {
        int n;
        string s;
        //由于我们是用C++的string读入的,并不是使用C的char数组读入,所以n没用上
        cin >> n >> s;
    
        //每个数字打5行
        //0---0
        //1---4
        //2---8
        //3---12
        //i--->4*i
        for (int i = 0; i <= 4; i++) { //一共5行,从0到4
            //每个数字
            for (int j = 0; j < s.size(); j++) {
                //每个数字都是固定列数.只不过位移不同
                //要打印啥数字?
                int c = s[j] - '0';
                //每一行打3列
                for (int k = 0; k < 3; k++)
                    //c这个数字的,第i行,第j列,需要找出位置关系描述
                    printf("%c", a[i][4 * c + k]);//4:场宽,c:数字,4*c就是找到对应数字的开始位置,就是上面的找规律
                //再打一列.,最后一列不打.
                if (j < s.size() - 1) printf(".");
            }
            printf("
    ");
        }
        return 0;
    }
    
  • 相关阅读:
    python json 和 pickle的补充 hashlib configparser logging
    go 流程语句 if goto for swich
    go array slice map make new操作
    go 基础
    块级元素 行内元素 空元素
    咽炎就医用药(慢性肥厚性咽炎)
    春季感冒是风寒还是风热(转的文章)
    秋季感冒 咳嗽 怎么选药
    解决IE浏览器“无法显示此网页”的问题
    常用的 css 样式 记录
  • 原文地址:https://www.cnblogs.com/littlehb/p/15039130.html
Copyright © 2020-2023  润新知