题目:
使用1~9填满“口口口+口口口=口口口”且每个空中数字不重复
//口口口+口口口=口口口成立 #include<bits/stdc++.h> using namespace std; int a[10],book[10],total; void dfs(int step){ if(step>9){ total++; 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]) { for(int i=1;i<=9;i++){ if(i==4) cout<<"+"; if(i==7) cout<<"="; cout<<a[i]; } cout<<endl; } return; } for(int i=1;i<=9;i++){ if(book[i]==0){ a[step]=i; book[i]=1; dfs(step+1); book[i]=0; } } return; } int main(){ dfs(1); cout<<"total="<<total/2<<endl;//173+286=459和286+173=459算了两次,所以除以2 }
出处:《啊哈!算法》第四章第1节