杭电OJ-2104 -----找手帕

杭电OJ-2104

找手帕


<问题描述>
儿童节已经过去了几天。您还记得小时候发生的事情吗?我记得我经常和朋友玩过一个叫做“隐藏手帕”的游戏。
现在,我向您介绍游戏。假设有N个人在玩游戏,他们坐在地上围成一个圆圈,每个人都在他们后面拥有一个盒子。另外,还有一个漂亮的手帕藏在一个盒子中,这是其中一个盒子。

然后叫哈哈(我的一个朋友)找到手帕。但是他有一个奇怪的习惯。每次他将搜索下一个与当前框分隔为M-1框的框。例如,有三个名为A,B,C的框,现在Haha在A的位置。现在他确定M是否等于2,因此他将首先搜索A,然后将在C框中搜索C。与当前框A相隔2-1 = 1框B。然后他将搜索框B,然后他将搜索框A。
因此,经过三遍他确定可以找到漂亮的手帕。现在我给你N和M,你能告诉我哈哈是否能找到手帕。如果可以的话,您应该告诉我“是”,否则请告诉我“可怜的哈哈”。

<输入>
将有几个测试用例。 每个案例输入包含两个整数N和M,它们满足以下关系:1 <= M <= 100000000和3 <= N <= 100000000。 当N = -1和M = -1表示输入大小写结束时,您不应处理数据。

<输出>
For each input case, you should only the result that Haha can find the handkerchief or not.

Sample Input
3 2
-1 -1

Sample Output
YES


错误理解: 搜三次,应该遍历每个人。
正确理解搜的次数是无限的,但应该每个人都查看一遍。
(英翻失误)


解题思路: N%M!=0;

#include
int main()
{
	int m,n,tem;
	while(scanf("%d%d",&n,&m)!=EOF)
	{
		if(n==-1&&m==-1)
			continue;
		if(n<m)
		{
			tem=n;
			n=m;
			m=n;
		}
		if(n%m!=0)
			printf("YES\n");
		else
			printf("POOR Haha\n");
	}
	return 0;
}

×考虑不周

正确思路
判断两个数是否互质,即两个数的公约数只有1。

#include
int main()
{
	int m,n,r;
	while(scanf("%d%d",&n,&m)!=EOF)
	{
		if(m==-1&&n==-1)
			continue;
		while(n!=0&&n!=1)
		{
			r=m%n;
			m=n;
			n=r;
		}
		if(n!=0)
			printf("YES\n");
		else
			printf("POOR Haha\n");
	}
	return 0;
}

你可能感兴趣的:(杭电OJ-2104 -----找手帕)