迎春舞会之数字舞蹈

迎春舞会之数字舞蹈


给出数字及其要求摆出的大小,编程摆出数字

【输入格式】

第一行为k。k表示要摆出数字的大小。
第二行为全部由数字组成的字符串,即要摆出的几个数字。

【输出格式】

注意:
每个数字之前有1个空格,所有数字全部对齐。
k<=30,s的长度不超过255
建议大家直接输出,不要保存。
如果对于大小和k有疑问,请自行理解。

【输入样例】
2
1234567890
【输出样例】
-- -- -- -- -- -- -- --
| | | | | | | | | | | | | |
| | | | | | | | | | | | | |
-- -- -- -- -- -- --
| | | | | | | | | | | | |
| | | | | | | | | | | | |
-- -- -- -- -- - --

ps:复制到记事本,这上面的太恶心
见到此题目,第一反应是恶心,实在是太没有人性了!这些数字还要对齐输出,太恐怖了!
但后来研究了一些大牛的代码.....实际上也没有那么恶心嘛~言归正传,我们开始讨论题目

首先,我们把0~9按照平面的方式打到记事本上(k=1),空格就打空格,换行先不理,例如:0是-|| ||-,所有的就是这样:
1:-|| ||-
2: | |
3:- |-| -
4:- |- |-
5: ||- |
6:-| - |-
7:-| -||-
8:- | |
9:-||-||-
0:-||- |-
看到这里善于观察的你也许看出来了:当第0,3,6个的字符都是横线,而在1,4则都是竖线,2,5也可以看出来了吧。也就是说,当第%3==0的字符就是横线,其他的就是竖线和空格,然后就是打出k个竖线、横线、空格就行了。所以实际上,你们只要能搞定k=1的情况也就整道题都会了。
如果还没看懂就看代码吧


#include<cstdio>
#include<string>
#include<cstring>
#include<iostream>
using namespace std;
char s[300];
int main()
{
    int k,l;
    string a[10]={"-|| ||-","  |  | ","- |-| -","- |- |-"," ||- | ","-| - |-","-| -||-",
    "- |  | ","-||-||-","-||- |-"};
    scanf("%d%s",&k,s);l=strlen(s);
    for(int p=0;p<=6;p++)
    {
        if(p==2||p==5)continue;
        if(p%3==0)
        {
            for(int i=0;i<l;i++)
            {
                printf(" ");
                for(int j=1;j<=k;j++)cout<<a[s[i]-'0'][p];//k个横线
                printf(" ");
                printf(" ");//这里的空格就是两个数字间隔着的空格
            }
            printf("\n");
        }
        else
        {
            for(int t=1;t<=k;t++)
            {
                for(int i=0;i<l;i++)
                {
                    cout<<a[s[i]-'0'][p];
                    for(int j=1;j<=k;j++)printf(" ");//k个空格
                    cout<<a[s[i]-'0'][p+1];
                    printf(" ");//这里的空格就是两个数字间隔着的空格
                }
                printf("\n");
            }
        }
    }
    return 0;
}

猜你喜欢

转载自www.cnblogs.com/candy067/p/11402018.html