杭电ACM 2104: hide handkerchief

来源:互联网 发布:淘宝企业店注册 编辑:程序博客网 时间:2024/05/20 04:48

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

这里写图片描述

这道题目刚开始没看懂,看了很久,意思是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 <iostream>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"<<endl;        else        cout<<"POOR Haha"<<endl;    }    return 0;}
0 0
原创粉丝点击