等式填空

来源:互联网 发布:渠道营销 知乎 编辑:程序博客网 时间:2024/04/27 19:00

1-9个数字组成一个等式()()()+()()()=()()(),求几种填法

等价于往9个盒子中装9个数字问题

#include<iostream>using namespace std;int a[10],book[10],n,total;//全局变量默认初始化为0 ,book标记是否牌在手中 void dfs(int step)//step表示现在站在第几个盒子面前 {int i;if(step==n+1)//如果站在n+1个盒子面前,表示前面的n个盒子都已经放好了 {if(a[1]*100+a[2]*10+a[3]+a[4]*100+a[5]*10+a[6]==a[7]*100+a[8]*10+a[9]){total++;for(i=1;i<=n;i++)cout<<a[i]<<" ";cout<<endl;}return ;//返回之前的一步(最近一次调用dfs的地方) 注意在走完所有的盒子时候step==n+1一定立刻return;  }  for(i=1;i<=n;i++) { if(book[i]==0)//表示第i个牌仍在手  { a[step]=i;//将i号扑克牌放入第step个盒子中 book[i]=1;//表示第i个扑克牌不在手上了 dfs(step+1);//第step个盒子放好牌,接下来走到下一个盒子面前 book[i]=0;//非常重要的一步,一定要将刚才尝试的扑克牌收回,才能进行下一次尝试。  }   }   } int main(){n=9;dfs(1);//首先站在第1个盒子面前cout<<total/2<<endl;return 0; }  


0 0