杭电ACM 2104: hide handkerchief

原创作品 转载请注明出处http://blog.csdn.net/always2015/article/details/45370385

杭电ACM 2104: hide handkerchief_第1张图片

这道题目刚开始没看懂,看了很久,意思是n个人围成一个圈,大家玩找手帕游戏,手帕藏在某一个人的箱子里,Haha来找,每一次他都会跳过m-1个人。问你Haha是不是一定能找到手帕。因为Haha找的次数是无限的,可以永远找下去,所以,只要他能把所有的人都找一遍就一定能找到。但按照他的这种找法,如果n和m不互质的话,不互质就会出现某些人是永远不会找。所以看一下 n和m的最大公约数是否等于1就行了。互质,公约数只有1的两个整数,叫做互质整数。求最大公约数如下(来源于百度百科):

int gcd(int a,int b)
{
if(b==0)return a;
else return gcd(b,a%b);
} //递归法求最大公约数,当最大公约数是1的时候,两个数互质
if(gcd(x,y)==1)那么x,y互质

上面的代码就是要辗转取余数,即C = A % B、D = B % C、E = C % D …
直到最后,结果为0就不是互质,为1就是互质。
我的代码如下,但是我的不是用递归,我是用一个循环的,AC代码如下:

#include 

using namespace std;

int main()
{
    int n,m,temp;
    while(cin>>n>>m)
    {
        if(n==-1&&m==-1)break;
        while(m!=0)
        {
            temp=m;
            m=n%m;
            n=temp;
        }

        if(n==1)
        cout<<"YES"<else
        cout<<"POOR Haha"<return 0;
}

你可能感兴趣的:(【ACM刷题】)