VIJOS-P1064 迎春舞会之数字舞蹈

洛谷 P1538 迎春舞会之数字舞蹈

洛谷传送门

JDOJ 1245: VIJOS-P1064 迎春舞会之数字舞蹈

JDOJ传送门

Description

​ 在越来越讲究合作的时代,人们注意的更多的不是个人物的舞姿,而是集体的排列。 为了配合每年的倒计时,同学们决定排出——“数字舞蹈”。顾名思义就是所有人一起排成若干个数字 -___-|||| 更为创新的是,每个人都是趴在地上,保证横竖。 现在给出数字及其要求摆出的大小,请你编程,模拟同学们的优美姿态。

Input

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

Output

​ 按题目要求输出。

Sample Input

2 1234567890

Sample Output

​ -- -- -- -- -- -- -- -- | | | | | | | | | | | | | | | | | | | | | | | | | | | | -- -- -- -- -- -- -- | | | | | | | | | | | | | | | | | | | | | | | | | | -- -- -- -- -- -- --

HINT

每个数字之前有1个空格,所有数字全部对齐。 k< =30,s的长度不超过255 建议大家直接输出,不要保存。 如果对于大小和k有疑问,请点击[url=http://www.Vijos.cn/ProblemImg/P1064.txt]这里[/url]下载当k=3时对于上述样例输入的标准输出,自行理解。

题解:

字符串模拟+打表。

这是一种玄学的思路,解释也解释不清,自己看代码吧:

#include<bits/stdc++.h>
using namespace std;
int k;
string s,m[10]={"-|| ||-","  |  | ","- |-| -",
    			"- |- |-"," ||- | ",    "-| - |-","-| -||-",
    			"- |  | ","-||-||-","-||- |-"};
int main()
{
    
    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++)
			{
                printf(" ");
                for(int j=0;j<k;j++)
                    cout<<m[s[i]-48][p];
                printf("  ");
            }
            puts("");       
        }
		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++)
                        printf(" ");
                    cout<<m[s[i]-48][p+1]<<' ';
                }
                puts("");
            }
        }
    }
    return 0;
}
原文地址:https://www.cnblogs.com/fusiwei/p/11696239.html