在一串数字中插入运算符号使等式成立,如12345678中插入“+”“-”“*”三种运算符号使得等于2004

在这里插入图片描述

#include<iostream>
#include<math.h>
using namespace std;

int main()
{
	int b[11]={1,2,3,4,5,6,7,8,9,9,9};
//取x,y,z三个数用来定位符号在12345678中的位置
	for(int x=1;x<8;x++){
		for(int y=x+1;y<8;y++){
			for(int z=y+1;z<8;z++){
	//将三个运算符号用0代替和12345678根据定位规则插入到数组中
					for(int e=0;e<10;e++){
					if(b[e]==x){
					for(int j=10;j>e;j--){
						b[j]=b[j-1];
					}
					b[e+1]=0;
					break;
					} 
				}
					for(int f=0;f<10;f++){
					if(b[f]==y){
					for(int j=10;j>f;j--){
						b[j]=b[j-1];
					}
					b[f+1]=0;
					break;
					} 
				}
					for(int g=0;g<10;g++){
					if(b[g]==z){
					for(int j=10;j>g;j--){
						b[j]=b[j-1];
					}
					b[g+1]=0;
					break;
					} 
				}
				//用0拆分数组,得到四个数字sum1、sum2、sum3、sum4
				int sum1=0;
				int sum2=0;
				int sum3=0;
				int sum4=0;
				int flag=0;
				int flag1=0;
				for(int r=10;r>=0;r--){
					flag++;
					if(b[r]!=0){
						sum1=sum1+pow(10,flag1)*b[r];
						flag1++;
						//cout<<sum1;
					}else
					break;	
				}
				flag1=0;
				for(int s=(10-flag);s>=0;s--){
					flag++;
					if(b[s]!=0){
						sum2=sum2+pow(10,flag1)*b[s];
						flag1++;
						//cout<<sum2;
					}else
					break;	
				}
				flag1=0;
				for(int u=(10-flag);u>=0;u--){
					flag++;
					if(b[u]!=0){
						sum3=sum3+pow(10,flag1)*b[u];
						flag1++;
						//cout<<sum3;
					}else
					break;	
				}
				flag1=0;
				for(int v=(10-flag);v>=0;v--){
					flag++;
					if(b[v]!=0){
						sum4=sum4+pow(10,flag1)*b[v];
						flag1++;
						//cout<<sum4;
					}else
					break;	
				}
				//将拆分出的数字用三个运算符号重新组合计算,等于2004的那组数据输出结果
				if(sum4+sum3-sum2*sum1==2004){
				cout<<sum4<<"+"<<sum3<<"-"<<sum2<<"*"<<sum1<<endl;
				}else
				if(sum4+sum3*sum2-sum1==2004){
				cout<<sum4<<"+"<<sum3<<"*"<<sum2<<"-"<<sum1<<endl;
				}else
				if(sum4-sum3+sum2*sum1==2004){
				cout<<sum4<<"-"<<sum3<<"+"<<sum2<<"*"<<sum1<<endl;
				}else
				if(sum4-sum3*sum2+sum1==2004){
				cout<<sum4<<"-"<<sum3<<"*"<<sum2<<"+"<<sum1<<endl;
				}else
				if(sum4*sum3+sum2-sum1==2004){
				cout<<sum4<<"*"<<sum3<<"+"<<sum2<<"-"<<sum1<<endl;
				}else
				if(sum4*sum3-sum2+sum1==2004){
				cout<<sum4<<"*"<<sum3<<"-"<<sum2<<"+"<<sum1<<endl;
				}
				//将数组数据重新归位
			b[0]=1;
			b[1]=2;
			b[2]=3;
			b[3]=4;
			b[4]=5;
			b[5]=6;
			b[6]=7;
			b[7]=8;
			b[8]=9;
			b[9]=9;
			b[10]=9;
		}
	}
		
}

}

理论上修改之后可以求解任何该形式的题目

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值