美文网首页
【洛谷 P1583】迎春舞会之数字舞蹈

【洛谷 P1583】迎春舞会之数字舞蹈

作者: Siding | 来源:发表于2018-10-04 16:23 被阅读0次

    迎春舞会之数字舞蹈(题目链接)

    方法

    • 将大小为1的数字保存在数组中
    • 输出时,将根据大小变化的位置循环输出
    • 具体实现及解释详见代码中

    代码

    #include <iostream>
    #include <string> 
    using namespace std;
    
    /*大小为2时,每个数字的宽度为4,高为7,数字2的表示如下(.表示空格) 
        .--.
        ...|
        ...|
        .--.
        |...
        |...
        .--.
     *所以当大小为1时,宽度为3,高为5(#为数字之间的分隔符)
     *   0   1   2   3   4   5   6   7   8   9
     * # - #   # - # - #   # - # - # - # - # - #
     * #| |#  |#  |#  |#| |#|  #|  #  |#| |#| |#
     * #   #   # - # - # - # - # - #   # - # - #
     * #| |#  |#|  #  |#  |#  |#| |#  |#| |#  |#
     * # - #   # - # - #   # - # - #   # - # - #
    */
    string tab[6] = {"",/*0   1   2   3   4   5   6   7   8   9*/
                        " -       -   -       -   -   -   -   -  ", //1
                        "| |   |   |   | | | |   |     | | | | | ", //2
                        "         -   -   -   -   -       -   -  ", //3
                        "| |   | |     |   |   | | |   | | |   | ", //4
                        " -       -   -       -   -       -   -  "  //5
                    };
    
    int main(){
        int k, len, t1, t2;
        string num;
        
        cin >> k >> num;                    //输入数据 
        len = num.length();                 //字符串的长度 
        for(int x = 1; x < 6; x++){         //循环输出5行 
            if(x%2 == 0){                   //若为第2行或者第4行 
                t1 = k;                     //该行的循环次数改为k次 
            }else{                          //否则 
                t1 = 1;                     //循环次数为1次 
            }
            for(int i = 0; i < t1; i++){    //循环t1次 
                for(int pos = 0; pos < len; pos++){         //循环输出每个字符 
                    for(int y = 0; y < 4; y++){             //最小字符宽度为4 
                        int tmp = (num[pos] - '0') * 4 + y; //计算在tab中的位置            
                        if(tmp%4 == 1){                     //若为字符的第2个位置 
                            t2 = k;                         //该行循环k次 
                        }else{                              //否则 
                            t2 = 1;                         //循环1次 
                        }
                        for(int j = 0; j < t2; j++){        //循环t2次 
                            cout << tab[x][tmp];            //输出计算后的字符 
                        }
                    }
                }
                cout << endl;                               //输出换行 
            }
        }
        
        
        return 0;
    }
    

    相关文章

      网友评论

          本文标题:【洛谷 P1583】迎春舞会之数字舞蹈

          本文链接:https://www.haomeiwen.com/subject/savxaftx.html