最新文章

这里会显示最新的几篇文章摘要。

计算器(模拟)

问题 F: 计算器 (monitor)

Tweetuzki 准备买一个计算器。
这个计算器上面的数字让 Tweetuzki 看着非常不习惯, Tweetuzki 喜欢7节型数字:

可是购买来的计算器不具备切换功能,于是 Tweetuzki 又找到了你,他将给你一串整数,希望你能将他们转换成规定尺寸的7节型数字。

输入

每组测试点包含多组数据。
每组测试数据一行包含2个整数size,num。size表示尺寸,num表示要你转换的数字。
最后一行以size=num=0结束。

输出

对于每组测试数据,输出一个整数,表示你转换过后的数字。
每组测试数据间有一个空行。

样例输入

2 12345
3 67890
0 0

样例输出


      --   --        -- 
   |    |    | |  | |   
   |    |    | |  | |   
      --   --   --   -- 
   | |       |    |    |
   | |       |    |    |
      --   --        -- 

 ---   ---   ---   ---   --- 
|         | |   | |   | |   |
|         | |   | |   | |   |
|         | |   | |   | |   |
 ---         ---   ---       
|   |     | |   |     | |   |
|   |     | |   |     | |   |
|   |     | |   |     | |   |
 ---         ---   ---   --- 



提示

num <= 10^8, size <= 10

分析

数字可以分成五部分,每部分可以简单分成两类,横线和竖线,注意每个数的结构和每组的换行

代码

#define int long long

inline void p_hen(int sz,int j) {     //打印横线,按照数字上部分分类
    if (j == 1 || j == 4) {           //顶为空的情况
        for (int i = 0;i < sz+2;++i) cout << ' '; 
    }
    else {                            //顶为横线的情况
        cout << ' ';
        for (int i = 0;i < sz;++i)
            cout << '-';
        cout << ' ';
    }
}
inline void p_shu(int sz,int j) {        //打印竖线,按照数字上部分分类   
    if (j == 1 || j == 2 || j == 3 || j == 7) {  //左空右线类
        for (int i = 0;i < sz+1;++i) cout << ' ';
        cout << '|';
    }else if (j == 4 || j == 8 || j == 9 || j == 0) { //左右都有线类
        cout << '|';
        for (int i = 0;i < sz;++i) cout << ' ';
        cout << '|';
    } else {                                         //左线右空类
        cout << '|';
        for (int i = 0;i < sz+1;++i) cout << ' ';
    }
}
cow row[N],col[N];
signed main() {
    ios::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);


    int sz;
    string num;
    while (cin >> sz >> num && (sz || num != "0")) {
        for (int i = 0;i < num.size();++i) {        //顶上部分
            p_hen(sz,num[i]-'0'); cout << ' ';
        }
        cout << '\n';
        for (int j = 0;j < sz;++j) {                //上部分
            for (int i = 0;i < num.size();++i) {
                p_shu(sz,num[i]-'0');cout << ' ';
            }
            cout << '\n';
        }
        for (int j = 0;j < num.size();++j) {   //中间部分
            int t = num[j]-'0';
            if (t == 4) t = 2;
            else if (t == 7 || t == 0) t = 1;
            p_hen(sz,t); cout << ' ';
        }
        cout << '\n';
        for (int i = 0;i < sz;++i) {          //下部分
            for (int j = 0;j < num.size();++j) {
                int t = num[j]-'0';
                if (t == 2) t = 5;
                else if (t == 5) t = 2;
                else if (t == 6) t = 4;
                else if (t == 9) t = 2;
                else if (t == 4) t = 1;
                p_shu(sz,t);
                cout << ' ';
            }
            cout << '\n';
        }
        for (int i = 0;i < num.size();++i) {  //底部
            int t = num[i] - '0';
            if (t == 7) t = 1;
            p_hen(sz,t);cout << ' ';
        }
        cout << "\n\n";

    }
}
posted @ 2025-03-02 17:58  bakul  阅读(37)  评论(0)    收藏  举报