水
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52
| #include<iostream> #include<cstdio> #include<set> using namespace std; set<int>num[7]; int n,cnt,x,y[7]; bool z; void judge(){ x=n*y[1]; if(x>98765){ z=true; return; } num[1].insert(x/10000); num[1].insert(x%10000/1000); num[1].insert(x%1000/100); num[1].insert(x%100/10); num[1].insert(x%10); if(num[1].size()==10){ printf("%05d / %05d = %d\n",x,y[1],n); cnt++; } num[1].clear(); return; } void find(int k){ for(int i=0;i<10;i++){ y[k]=y[k+1]; num[k]=num[k+1]; while(num[k].find(i)!=num[k].end()&&i<9) i++; if(num[k].find(i)==num[k].end()){ y[k]*=10; y[k]+=i; num[k].insert(i); if(k-1) find(k-1); else judge(); if(z) return; } } return; } int main(){ int t=0; while(cin>>n&&n){ cnt=0; z=false; if(t++) cout<<endl; find(5); if(!cnt) cout<<"There are no solutions for "<<n<<"."<<endl; } return 0; }
|
** 本文迁移自我的CSDN博客,格式可能有所偏差。 **