ZOJ 1003 Crashing Balloon

题目来源: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;
}


你可能感兴趣的:(模拟,ZOJ)