hdu 2104(藏手帕)

149 篇文章 0 订阅

题目大意:意思是n个人围成一个圈,大家玩丢手帕游戏,手帕藏在某一个人的箱子里,Haha来找,每一次他都会跳过m-1个人。问你Haha是不是一定能找到手帕。因为Haha找的次数是无限的,可以永远找下去,所以,只要他能把所有的人都找一遍就一定能找到。但按照他的这种找法,如果nm不互质的话,不互质就会出现某些人是永远不会找。所以看一下 nm的最大公约数就行了


解题思路:

判断是否可以遍历所有的盒子,只要盒子数和每次走的步数存在值不等于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");
		}
	}
}



  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

帅气的东哥

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值