ZOJ 1003
来源:互联网 发布:apm软件 编辑:程序博客网 时间:2024/05/01 09:36
这也是一个搜索的问题,搜索两人分数的所有分解方法。当两者的所有分解方式中,都必须使用到某个或某几个相同的因子时,说明报高分的人在撒谎。换句话说,如果两人的分数能够在不占用对方因子的情况下成功分解,那么报高分的人没有撒谎!
注意考虑特殊情况,如果较低分数本身不可能被1到100内的整数分解,那么高分赢,因为在这时,挑战者自己就把自己的分数算错了!
#include<stdio.h>void factoring(int max,int min,int now);int flag1,flag2,ret; //flag1==1表示大数可分解,flag2==1表示小数可分解, //flag1和flag2保存的状态不保证在受对方干扰下也是如此int main() //ret表示在不占用对方因子时,两者中成功分解的个数{int a,b;while(scanf("%d %d",&a,&b)!=EOF){int min,max;flag1 = flag2 = 0;ret = 0;max = a>b?a:b;min = a<b?a:b;factoring(max,min,2);if(ret==1&&flag2==1) //不占用对方因子时只能有一个数分解成功,而且小数{ //可分解,此时挑战成功!printf("%d\n",min);}else{printf("%d\n",max);}}return 0;}void factoring(int max,int min,int now) {if(now>100)return;else{int i = 0,j = 0;if(max==1){flag1 = 1;i = 1;}if(min==1){flag2 = 1;j = 1;}ret = (i+j)>ret?(i+j):ret; //更新retif(max%now==0) //不同时使用当前因子now,保证不占用对方因子!factoring(max/now,min,now+1);if(min%now==0)factoring(max,min/now,now+1);factoring(max,min,now+1);}}
用全局变量记录状态,然后递归时不断刷新状态。不要忘记每次循环时将状态设为0!
话说,为什么代码片没有C语言的呀,虽然C++也可以,但是还是觉得不爽ing。
0 0
- zoj 1003
- zoj-1003
- zoj-1003
- zoj 1003
- zoj 1003
- ZOJ 1003
- ZOJ 1003
- ZOJ 1003
- ZOJ 1003
- zju 1003 zoj 1003
- [ZOJ] 1003 Crashing Balloon
- zoj 1003 Crashing Balloon
- ZOJ 1003 Crashing Balloon
- zoj 1003 Crashing Balloon
- ZOJ 1003 Crashing Balloon
- zoj 1003 Crashing Balloon
- zoj 1003 Crashing Balloon
- zoj 1003 Crashing Balloon
- p51 17
- jQuery简单的翻书特效插件-jBooklet
- boost asio异步简单测试
- Xcode 升级带来的警告、错误和解决方法
- JM代码分析(一)
- ZOJ 1003
- 创建对象和销毁对象的原则
- Java Deque与LinkedBlockingDeque深入分析
- 在maven仓库里安装hadoop依赖包
- 宁波2012-3 积木
- HP-UX web登陆无反应,猜就是数据库出了问题
- (hiho一下)三分·三分求极值
- mysql通过批处理备份还原数据库
- Eclipse安装插件