插入加减号使结果为110

题目大意:在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,、递归搜索






















评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值