程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> hdu 2104

hdu 2104

編輯:C++入門知識

題目大意:意思是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");  
        }  
    }  
}  

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved