題目大意:意思是n個人圍成一個圈,大家玩丟手帕游戲,手帕藏在某一個人的箱子裡,Haha來找,每一次他都會跳過m-1個人。問你Haha是不是一定能找到手帕。因為Haha找的次數是無限的,可以永遠找下去,所以,只要他能把所有的人都找一遍就一定能找到。但按照他的這種找法,如果n和m不互質的話,不互質就會出現某些人是永遠不會找。所以看一下 n和m的最大公約數就行了
解題思路:
判斷是否可以遍歷所有的盒子,只要盒子數和每次走的步數存在值不等於1的最大公約數時,他就會回到起點,從而做重復的動作。
歸根結底,其實就是給出盒子數和步數,判斷能否遍歷所有盒子。這裡有一個規律就是如果和字數和步數互質(最大公約數為1),那麼則能遍歷,否則不能遍歷。
代碼如下:
/* * 2014_2.cpp * * Created on: 2013年8月10日 * Author: Administrator */ #include <stdio.h> /** * 輾轉相除法,用來求最大公約數 */ int mul(int a , int b){ int temp; while(b!=0){ temp = b; b = a%b; a = temp; } return a; } int main(){ int n,m; while(scanf("%d%d",&n,&m)!=EOF){ if(n==-1&&m==-1){ break; } //互質,則最大公約數為1 if(mul(n,m) != 1){ printf("POOR Haha\n"); }else{ printf("YES\n"); } } }