很水的模拟题,拿数组搞就好了。
注意边界的地方不要算重。
#include <cstdio> #include <cstring> #include <algorithm> using namespace std; int N,T,M; int save[10000]; char str[1000]; int main() { scanf("%d",&T); for(int i=0;i<T;i++) { scanf("%s",str); int len = strlen(str); int cnt = 0; save[cnt++]=str[0]-'0'; for(int i=1;i<len;i++) { if(abs(str[i]-str[i-1]) <= 1) { //save[cnt++] = str[i-1]-'0'; save[cnt++] = str[i]-'0'; } else { if(str[i] > str[i-1]) for(int j=str[i-1]+1;j<=str[i];j++) save[cnt++] = j-'0'; else { for(int j=str[i-1]-1;j>=str[i];j--) save[cnt++] = j-'0'; } } } int ma = 0; for(int i=0;i<cnt;i++) ma = max(ma,save[i]); for(int i=ma;i>0;i--) { for(int j=0;j<cnt;j++) if(save[j] >= i) printf("+"); else printf("*"); printf(" "); } } }