#include <stdio.h>
#include <string.h>
#define N 9
using namespace std;
void fun(char op[], int sum, int prevadd, int a[], int i);
void diapasolution(char op[], int a[]);
int main(){
int a[N];
char op[N];
for(int i=0;i<N;i++){
a[i]=i+1;
}
printf("求解结果\n");
fun(op,a[0],a[0],a,1); //插入位置从i开始
}
void fun(char op[], int sum, int prevadd, int a[], int i) {
if(i==N){ //扫描完所有位置
if(sum==100) //找到一个解
diapasolution(op,a);//输出解
return;
}
op[i]='+'; //位置i插入‘+’
sum+=a[i]; //计算结果
fun(op,sum,a[i],a,i+1); //继续处理下一个位置
sum-=a[i]; //回溯
op[i]='-'; //位置i 插入‘-’
sum-=a[i]; //计算结果
fun(op,sum,-a[i],a,i+1); //继续处理下一个位置
sum+=a[i]; //回溯
op[i]=' '; //位置i插入空格
sum-=prevadd; //先减去前面的元素值
int temp; //计算新元素值
if(prevadd>0)
temp=prevadd*10+a[i];
else
temp=prevadd*10-a[i];
sum+=temp; //计算合并结果
fun(op,sum,temp,a,i+1); //继续处理下一个位置
sum-=temp; //回溯
sum+=prevadd;
}
void diapasolution(char op[], int a[]) {
printf("%d",a[0]);
for(int j=1;j<N;j++){
if(op[j]!=' ')
printf("%c",op[j]);
printf("%d",a[j]);
}
printf("=100\n");
}