1 条题解

  • 0
    @ 2025-8-24 21:16:52

    自动搬运

    查看原文

    来自洛谷,原作者为

    avatar chen_zhe
    Aya 敲可爱的~

    搬运于2025-08-24 21:16:51,当前版本为作者最后更新于2024-12-14 14:18:10,作者可能在搬运后再次修改,您可在原文处查看最新版

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

    以下是正文


    欢迎报名洛谷网校,期待和大家一起进步!

    本题考查字符串。介绍两种做法。

    做法 1:逐行处理。对于字符串,我们从上往下处理每一行都填写哪些元素,并且直接进行输出。

    具体而言,使用两层循环,外层循环是行数,内层循环是字符串,根据行数和当前的数字,决定应当填入哪些字符。

    参考代码(部分):

    for (int i = 1; i <= 5; i++) { //从第 1 行到第 5 行
        string ans = "";
        for (int j = 0; j < s.length(); j++) {
            char ch = s[j];
            if (ch == '0') {
                if (i == 1 || i == 5) //可以根据图形形状进行判断,减少代码编写量
                    ans += ".....";
                else
                    ans += ".***.";
            } else if (ch == '1')
                ans += "****.";
            else if (ch == '2') {
                //请自行完成这个分支结构的内容
            }
            else if (ch == '3') {
                //请自行完成这个分支结构的内容
            }
        }
        cout << ans << endl;
    }
    

    做法 2:打表处理(需要学习二维数组)。

    题目中把数字 0,1,2,30,1,2,3 的形状都告诉我们了,因此可以将其以字符串二维数组的形式记录在程序中。具体而言,我们可以定义一个字符串数组 string ch[a][b],其中 aa 是表示数字,bb 是表示行数。

    string ch[4][5]={
    	".....", //ch[0][0] 存储的字符串
    	".***.", //ch[0][1] 存储的字符串
    	".***.", //ch[0][2] 存储的字符串
    	".***.", //ch[0][3] 存储的字符串
    	".....", //ch[0][4] 存储的字符串
    //在参考代码中以 0 为例子,在编写代码的时候,还需要把 1,2,3 的形状写入数组定义中。
    

    这样的好处是,对于读入的每个数字,只需使用简单的循环即可将每个字符串拼接在一起,并且可以直接进行输出:

    string ans[5]; //使用 ans[0..4] 记录每一行的字符都应分别是什么
    for (int i = 0; i < s.length(); i++) {
        int x = s[i] - '0'; //得到对应的数字
        for (int j = 0; j <= 4; j++)
            ans[j] += ch[x][j]; //将五行字符分别添加到答案的对应行之后
    }
    for (int i = 0; i <= 4; i++) //分别输出五行字符串
        cout << ans[i] << endl;
    
    • 1

    信息

    ID
    11112
    时间
    1000ms
    内存
    512MiB
    难度
    2
    标签
    递交数
    0
    已通过
    0
    上传者