1 条题解

  • 0
    @ 2025-8-24 21:26:14

    自动搬运

    查看原文

    来自洛谷,原作者为

    avatar ingu
    **

    搬运于2025-08-24 21:26:13,当前版本为作者最后更新于2017-06-20 20:04:20,作者可能在搬运后再次修改,您可在原文处查看最新版

    自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多

    以下是正文


    第一感觉是NOIP不会考的题目,第二感觉就是因为k的存在让此题有些意思。

    每个数字是用最多7根线摆出来的。先考虑如何来保存0-9这些数字的信息,

    首先想到用一个[10][7]的bool数组,保存哪些位置有线,哪些没有。

    但代码中判断0和1的同时,还需要判断是横线还是竖线,所以又想到可以用一个字符串数组来保存。

    比如数字8就是“-||-||-”,顺序是从上至下,从左至右。而1则是“ | | ”,空位用空格占位。 接下来开始打印,这个打印过程有些像是针式打印机打印的过程。

    一共可以分成两种情况,打印横线和打印竖线。横线的是后是0、3、6这三位,刚好可以对3取余来判断。

    竖线打印的时候要一下打印两条竖线,所以处理1,4的时候把2、5也解决了。

    最后就是控制循环打印k个空格或者k条横线或竖线了。参考代码:

    #include <bits/stdc++.h>
    using namespace std;
    int main()
    {
        int k;
        string s,m[10]={"-|| ||-","  |  | ","- |-| -",
        "- |- |-"," ||- | ",    "-| - |-","-| -||-",
        "- |  | ","-||-||-","-||- |-"};
        cin>>k>>s;
        for (int p=0;p<7;p++){
            if (p==2 || p==5) continue;
            if (p%3==0){
                for (int i=0;i<s.size();i++){
                    cout<<' ';
                    for (int j=0;j<k;j++){
                        cout<<m[s[i]-48][p];
                    }
                    cout<<"  ";
                }
                cout<<endl;        
            }else{
                for(int q=0;q<k;q++){
                    for (int i=0;i<s.size();i++){
                        cout<<m[s[i]-48][p];
                        for (int j=0;j<k;j++){
                            cout<<' ';
                        }
                        cout<<m[s[i]-48][p+1]<<' ';
                    }
                    cout<<endl;
                }
            }
        }
        return 0;
    }
    
    • 1

    信息

    ID
    531
    时间
    1000ms
    内存
    125MiB
    难度
    3
    标签
    递交数
    0
    已通过
    0
    上传者