ZOJ Problem Set - 1003

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 }

 

 

 

posted @ 2014-05-16 19:50  Hi,Leisure  阅读(330)  评论(0编辑  收藏  举报