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

迎春舞会之数字舞蹈

方法

  • 将大小为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++){         //循环输出5if(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;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值