题目:
等式变换
描述: 输入一个正整数X,在下面的等式左边的数字之间添加+号或者-号,使得等式成立。
1 2 3 4 5 6 7 8 9 = X
比如:
12-34+5-67+89 = 5
1+23+4-5+6-7-8-9 = 5
请编写程序,统计满足该输入整数的所有等式的个数。
采用递归方法:
#include<queue>
#include<list>
#include<algorithm>
#include<numeric>
#include<cstdio>
#include<vector>
#include <iostream>
#include<string>
#include<stack>
#define INT_MAX (1<<30)
using namespace std;
int compute(string s){
int t=0,t2;
int res=0;
int i=0;
int flag=-1;
while(isdigit(s[i])){
res=10*res+(s[i]-'0');
i++;
}
while(i<s.length()){
if(s[i]=='+'){flag=0;}
else {flag=1;}
t=0;
i++;
while(isdigit(s[i])){
t=10*t+(s[i]-'0');
i++;
}
if(!flag) res=res+t;
else if(flag==1) res=res-t;
}
return res;
}
void sel(int* arr,int x,int ind,int n){
if(ind==n){
string s="1";
for(int i=0;i<n;++i)
{ if(arr[i]==0){s+="+";}
else if(arr[i]==1) {s+="-";}
s+='2'+i;
}
if(compute(s)==x)
cout<<s<<endl;
return ;}
for(arr[ind]=-1;arr[ind]<=1;++arr[ind]){
sel(arr,x,ind+1,n);
}
}
int main(){
int arr[8];
int x=5;
sel(arr,x,0,8);
return 0;
}