踩气球
来源:互联网 发布:全站仪数据传输软件 编辑:程序博客网 时间:2024/04/28 12:54
题目大意:一共有100个标号为1-100的气球,两个小孩同时踩,分数是气球编号的乘积,游戏结束后分数低的选手可以进行质疑,如果分数高的选手说了假话,则分数低的选手获胜,如果两个人都说了假话,则分数高的人获胜,输出获胜人的分数。
例如:
①125和25
125=25*5,而25=25*1 高分选手想获得125 必须踩25和5号气球,而25号气球被低分踩了,所以高分说谎,低分赢。
②162和81
81只能踩81 但是162=81*2=27*3*2,所以高分没说谎,所以高分赢。
算法分析
1、输赢判断
高分说谎低分说谎 高分赢
高分实话低分实话 高分赢
高分实话低分说谎 高分赢
高分说谎低分实话 低分赢
2、那么如何判断两人是否说谎呢?
首先得分的因数必须是1-100,若两个得分为1-100之间的数,说明二人都没说谎。
超过100的数不可能是质数,否则说谎。
俩个和数看代码(不易表达)。
代码
#include<cstdio>using namespace std;int ature=0,bture=0;int f(int a,int b,int p){ if(ature) return 0; if(b==1&&a==1) {ature=1;return 0;}//a==1并不能说明什么如例中的162 和81,只有b把较大的因数拿完了变成1了之后 a还有除了b之外的因数才行 if(b==1){bture=1;}//没有return while(p>1) { if(a%p==0) f(a/p, b, p-1); if(b%p==0) f(a, b/p, p-1); p--; } return 0;}int main(){ int a,b,t; while(scanf("%d %d",&a,&b)!=EOF) { if(b>a)//既然输出的是分数,那么无所谓是哪个人,让a为高分b为低分 { t=a;a=b;b=t; } ature=0;bture=0;//每次都要初始化 f(a,b,100);//从100开始给因数 if(ature==0&&bture) printf("%d\n",b);//不要忘记换行 else printf("%d\n",a); } return 0;}
1 0
- 踩气球
- 踩气球
- 踩气球ZOJ1003
- BZOJ4631 踩气球
- [bzoj4631]踩气球
- 4631: 踩气球
- BZOJ 4631 踩气球
- BZOJ4631: 踩气球
- 【bzoj4631】踩气球
- 气球
- ZJU1003 Crashing Balloon - 踩气球
- bzoj 4631: 踩气球 线段树建图
- 【BZOJ4631】踩气球【暴力】【线段树优化】
- bzoj 4631: 踩气球(线段树)
- noj算法设计题——踩气球
- 购买气球
- 树莓派探空气球
- #170. 气球
- 第三方SSKeychain保存用户密码
- 蓝桥杯--历届试题 分糖果
- android-Optimizing Content for the Assistant,Handling App Links
- 关于人工智能的实现
- Could not create the view: An unexpected exception was thrown
- 踩气球
- “黄毒”泛滥,早恋蔓延,危害深重,果报深重 ----赵老师现世因果讲座摘录
- D7100 调节曝光补偿
- 2015规划与2016总结
- 回溯法寻找数独(java)
- Junit学习笔记之--第一个JUnit测试类(in eclipse )
- Android在滚动列表中实现视频的播放(ListView & RecyclerView)
- 小小的学习了一点点
- css3 3d 学习文档