您的位置:首页 > 其它

ZOJ 1003 Crashing Balloon

2014-04-02 15:46 429 查看
题目来源:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=3

这是一道模拟题!

#include <iostream>
#include <cstdio>
#include <cstring>

using namespace std;

bool aTrue, bTrue;
/**
判断a, b有没有公共的因子,如果有,那么分数低的胜,如果没有,那么分数高的获胜
如果分数在2-100之间,那么就不用解,因为有相应的气球
如果全部说谎,则高分获胜

*/
void Judge(int a, int b, int p)
{
if(aTrue)//如果a说的实话,那么就可以直接输出高分获胜
return ;
if(a == 1 && b == 1)//表明a,b没有公共的因子,那么a, b说的都是实话,那么质疑被否决,返回
{
aTrue = true;
return ;
}
if(b == 1)//到此无法判断a是否是说的实话,但是b说的实话,继续向下判断a
bTrue = true;

while(p > 1)
{
if(a % p == 0)//如此进行下去,就不会有共同的公因子
Judge(a/p, b, p-1);
if(b % p == 0)
Judge(a, b/p, p-1);
p--;
}
return ;
}

int main()
{
int a, b;
while(~scanf("%d %d", &a, &b))
{
if(a < b)
{
a ^= b;
b ^= a;
a ^= b;
}
aTrue = false;
bTrue = false;
Judge(a, b, 100);
if(!aTrue && bTrue)//高分说谎,低分说的是实话,则输出低分
printf("%d\n", b);
else
printf("%d\n", a);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: