设计一个算法在 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;
}

输出

在这里插入图片描述

posted @ 2022-06-28 21:49  俺叫西西弗斯  阅读(0)  评论(0)    收藏  举报  来源