题目大意:给一个数字串,输出一个图形,为了使图形看起来平滑,每一列‘+’之差不超过1。
我们的模拟神10分钟就看题,上交代码一气呵成。而我看完之后光想就想了10分钟,可见模拟功力之差呀。
首先行数比较好确定,就是一串数字之中的最大值,列数通过遍历数字串就可以了,若两个相邻数字a,b之差大于等于2,则必然就要a+1....b-1,使之变平缓,记录每一个列数的数字,输出时一行一行输出,如果行数r>所在列数,输出“*”,否则输出“+”;
//A 模拟
#include<iostream>
#include<cstdio>
#include<string>
#include<cstring>
#include<algorithm>
#include<cmath>
using namespace std;
int a[1100];
char s[110];
int Max,cnt;
void solve()
{
int i,j;
cnt=0;
Max=0;
int len=strlen(s);
for(int i=0;i<len;i++)
{
if(Max<(s[i]-'0'))
Max=s[i]-'0';
a[cnt++]=s[i]-'0';
if(i!=len-1)
{
if((s[i+1]-'0')-(s[i]-'0')>=2)
{
for(j=(s[i]-'0')+1;j<s[i+1]-'0';j++)
a[cnt++]=j;
}
else if((s[i]-'0')-(s[i+1]-'0')>=2)
{
for(j=(s[i]-'0')-1;j>s[i+1]-'0';j--)
a[cnt++]=j;
}
}
}
}
void output()
{
int i,j;
for(i=Max;i>=1;i--)
{
for(j=0;j<cnt;j++)
{
if(i>a[j])
cout<<"*";
else
cout<<"+";
}
cout<<endl;
}
}
int main()
{
int T;
cin>>T;
while(T--)
{
cin>>s;
solve();
output();
}
return 0;
}