设计一个算法在 1,2,……9(顺序不变) 原创
题目
数值之间插入+或者-或者什么都不插入,
使得计算结果总是 100 的程序。
例如 1+2+34-5+67-8+9=100。
输出所有的答案。
算法标签
DFS 暴力搜索
代码
#include<iostream>
using namespace std;
const int N=9;
int arr[N]={1,2,3,4,5,6,7,8,9};
char op[N]; //最多有九个符号
void func(int sum,int preAdd,int i){ //sum 总数 preAdd上一个添加的数字 i记录当前是第几个
if(i==N){//选完前9个数字
if(sum==100){//总数到100
cout<<arr[0];//输出第一个数字
for(int j=1;j<N;j++){
if(op[j]!=' ')cout<<op[j];//如果当前符号不是空格,就输出符号
cout<<arr[j];//输出数字
}
cout<<"=100"<<endl;
}
return ;
}
else {
op[i]='+';//符号是+的情况
func(sum+arr[i],arr[i],i+1);//记录状态
op[i]='-';//符号是-的情况
func(sum-arr[i],-arr[i],i+1);
op[i]=' ';//符号是空格的状态
int tmpN=0;//计算当前数字与前一个数字和一的新数字
if(preAdd>0)tmpN=preAdd*10+arr[i];//如果前一个数字是正数 那么新的合就是正数
else tmpN=preAdd*10-arr[i];
func(sum-preAdd+tmpN,tmpN,i+1);//记录新状态 总数-上一个数字+新融合的数字 preAdd是新数字 i+1去选择下一个数字
}
}
int main(){
func(arr[0],arr[0],1);//起始
return 0;
}
输出


浙公网安备 33010602011771号