题目大意:任何一个1~7的数由竖着一列字符表示,从下到上数是几就有几个‘+’,空余地方是‘*’,现在给定一行数,将这行数用一个矩阵表示出来,要求,相邻两列之间‘+’个数不能相差超过1,超过1了就在中间加一些列,使得最后矩阵中相邻两列相差不超过1。
。。。模拟,一列一列搞就好。
#include<cstdio>
#include<iostream>
#include<cstring>
#include<string>
#include<algorithm>
#include<cmath>
using namespace std;
int n;
char s[110];
char ans[10][1100];
int loc;
int maxx;
void PR(int x,int y){
loc++;
for(int i=1;i<=y;i++)ans[x-i+1][loc]='+';
}
void PRINT(){
for(int i=1;i<=maxx;i++){
for(int j=1;j<=loc;j++)printf("%c",ans[i][j]);
printf("\n");
}
}
int main(){
scanf("%d",&n);
for(int i=1;i<=n;i++){
memset(ans,'*',sizeof(ans));
loc=0;
scanf(" %s",s);
int ji=s[0]-'0';
maxx=s[0]-'0';
for(int i=1;s[i];i++)maxx=max(maxx,s[i]-'0');
PR(maxx,ji);
int j=0;
while(s[j+1]){
j++;
// printf("j=%d\n",j);
if(ji>s[j]-'0'){
// printf("fxck1\n");
for(int k=ji-1;k>s[j]-'0';k--)PR(maxx,k);
}
if(ji<s[j]-'0'){
// printf("fxck2\n");
for(int k=ji+1;k<s[j]-'0';k++)PR(maxx,k);
}
PR(maxx,s[j]-'0');
ji=s[j]-'0';
}
PRINT();
}
return 0;
}