1.翻译参考
http://www.cnblogs.com/woodfish1988/archive/2006/11/10/556926.html
2.代码参考
http://www.cnblogs.com/phinecos/archive/2008/09/18/1293213.html
注意:
(1)多条件的顺序与选择,原文只是叙述游戏规则,而需要细细分析游戏规则选出条件的先后判断顺序。
(2)迭代与递归:
http://blog.csdn.net/swliao/article/details/5337896
http://www.nowamagic.net/librarys/veda/detail/2324
(3)C++ 自带 swap函数
(4)canFactor其中的一步回溯是否多余?
3.代码参考,类似的两个
http://www.fookwood.com/archives/197
http://blog.csdn.net/l04205613/article/details/6191192
学习:
对题意条件的理解,实际上一个条件:挑战成功只有一种情况,就是较小数分解成功,大数失败
4.自己写的,核心:迭代,DFS
1 #include<iostream> 2 using namespace std; 3 void dfs(int a,int b,int i); 4 int flagA,flagB; 5 int main() 6 { 7 int numA,numB; 8 while(cin>>numA>>numB) 9 { 10 if(numA<numB) 11 swap(numA,numB);//确保numB为挑战者 12 flagA=flagB=0; 13 dfs(numA,numB,2); 14 if(flagB&&!flagA)//挑战成功只有一种情况,就是较小数分解成功,大数失败 15 cout<<numB<<endl; 16 else 17 cout<<numA<<endl; 18 } 19 20 } 21 void dfs(int a,int b,int i) 22 { 23 if(b==1) 24 { 25 if(a==1) 26 flagA=1; 27 flagB=1; 28 } 29 if(i>100||flagA==1&&flagB==1)//出口 30 return; 31 if (b%i==0)//先分解较小数 32 dfs(a,b/i,i+1); 33 if(a%i==0) 34 dfs(a/i,b,i+1); 35 dfs(a,b,i+1); 36 37 }