插入加减号使结果为110

时间:2022-11-05 15:02:46

题目大意:在123456789可以在这串数字中间任意选择插入 ‘+' or '-' ,使得最后的结果为110

解题思路:

1、直接暴力破解,枚举8个空位的不同情形即可。


#include <iostream>
#include <string.h>
#include <algorithm>
using namespace std;
char z[20]="01 2 3 4 5 6 7 8 9";
int count(int s,int f){
int n=1,num=0;
for(int i=f;i>=s;i--){
if(z[i]!=' '){
num+=(z[i]-'0')*n;
n=n*10;
}

}
return num;
}
int main(){
for(int a=0;a<3;a++)
for(int b=0;b<3;b++)
for(int c=0;c<3;c++)
for(int d=0;d<3;d++)
for(int e=0;e<3;e++)
for(int f=0;f<3;f++)
for(int g=0;g<3;g++)
for(int h=0;h<3;h++){
switch (a){
case 0:z[2]='+';break;
case 1:z[2]='-';break;
case 2:z[2]=' ';break;
}

switch (b){
case 0:z[4]='+';break;
case 1:z[4]='-';break;
case 2:z[4]=' ';break;
}

switch (c){
case 0:z[6]='+';break;
case 1:z[6]='-';break;
case 2:z[6]=' ';break;
}

switch (d){
case 0:z[8]='+';break;
case 1:z[8]='-';break;
case 2:z[8]=' ';break;
}

switch (e){
case 0:z[10]='+';break;
case 1:z[10]='-';break;
case 2:z[10]=' ';break;
}

switch (f){
case 0:z[12]='+';break;
case 1:z[12]='-';break;
case 2:z[12]=' ';break;
}

switch (g){
case 0:z[14]='+';break;
case 1:z[14]='-';break;
case 2:z[14]=' ';break;
}
switch (h){
case 0:z[16]='+';break;
case 1:z[16]='-';break;
case 2:z[16]=' ';break;
}

int s=1,f=1,sum=0;char C='+';

for(int i=1;i<=strlen(z);i++){
if(z[i]=='+'||z[i]=='-'||i==strlen(z)){
f=i-1;
if(C=='+')sum+=count(s,f);
else sum-=count(s,f);
C=z[i];
s=i+1;//更新s
}
}
if(sum==110){
for(int i=1;i<strlen(z);i++)if(z[i]!=' ')cout<<z[i];

cout<<"="<<sum<<endl;


}


}
// char ss="1 2";
return 0;

}
//result
/*
1+2+34+5+67-8+9=110
1+234-56-78+9=110
1-2+3+45-6+78-9=110
12+3+45+67-8-9=110
12+34+56+7-8+9=110
12-3+4-5+6+7+89=110
123+4+5+67-89=110
123+4-5-6-7-8+9=110
123-4+5-6-7+8-9=110
123-4-5+6+7-8-9=110

--------------------------------
Process exited with return value 0
Press any key to continue . . .
*/


2,、递归搜索