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

2018-10-04  本文已影响0人  Siding

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

方法

代码

#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;
}
上一篇下一篇

猜你喜欢

热点阅读