题 意:。。。。。。
输入样例:
5
?????
0+0+0
?+*??
?0+?0
?0+0?
输出样例:
11111
0+0+0
IMPOSSIBLE
10+10
IMPOSSIBLE
思 路:暴力,考虑所有情况。(lll¬ω¬)
#include<bits/stdc++.h>
using namespace std;
const int maxn = 1e2+5;
char s[1000];
int n;
int main() {
int t;
scanf("%d",&t);
while(t--) {
scanf("%s",s);
bool flag = true;
int len = strlen(s);
for(int i=0; i<len; i++) {
if(i == 0) {
if(s[i] == '?') {
s[i] = '1';
}
if(s[i] == '+' || s[i] == '*') {
flag = false;
break;
}
if((s[i]>='0' && s[i] <= '9')) {
if(s[i] == '0' && (s[i+1]>='0' && s[i+1]<='9')) {
flag = false;
break;
}
continue;
}
continue;
}
if(s[i] == '?') {
s[i] = '1';
if(i == 1 && s[i-1] == '0' && ((s[i+1]>='0' && s[i+1] <='9')||s[i+1] == '?')) {
s[i] = '+';
continue;
}
if(s[i-1] == '0') {
bool flag1 = false;
int temp = i-1;
while(temp--) {
if(s[temp] == '+' || s[temp] == '*') {
if(temp == i-2) {
if(i<len-1 && ((s[i+1]>='0' && s[i+1]<='9')||s[i+1] == '?')) {
s[i] = '+';
flag1 = true;
break;
}
}
break;
}
if(s[temp] >='1' && s[temp]<='9') {
flag1 = true;
break;
}
}
if(!flag1) {
flag = false;
break;
}
}
}
if(s[i] == '+' || s[i] == '*') {
if(i == len-1) {
flag = false;
break;
}
if(s[i-1] == '+' || s[i-1] == '*') {
flag = false;
break;
}
if(i<len-1) {
if(s[i+1] == '+' || s[i+1] == '*') {
flag = false;
break;
}
}
}
if(s[i]=='0') {
bool flag1 = false;
int temp = i;
if(i<len-1 && (s[i-1]=='*' || s[i-1]=='+')) {
if(s[i+1]>='0' && s[i+1] <='9') {
flag = false;
break;
}
}
while(temp--) {
if(s[temp] == '+' || s[temp] == '*') {
if(temp == i-1) {
flag1 = true;
}
break;
}
if(s[temp]>='1' && s[temp] <='9') {
flag1 = true;
break;
}
}
if(!flag1) {
flag = false;
break;
}
}
if(s[i]>='1' && s[i]<='9') {
continue;
}
}
if(!flag) {
printf("IMPOSSIBLE\n");
} else {
printf("%s\n",s);
}
}
return 0;
}
/*
0+8+17
1+01
0+0?1
*/