杭电2104隐藏的手帕
1.未过的
#include<stdio.h>
/*
题目大意:就是一共有N个人在做游戏,有一个人每隔m个位置找一下N个人中的一个人
下面是否有手帕,找的次数可以为无限次,问是否能找到手帕
本质:问n,m是否有最大公约数(不可以为1)
解决方法:更相减损法
*/
int main()
{
int n,m;
while(scanf("%d%d",&n,&m)==2)
{
if(n==-1&&m==-1)
break;
int t,p=0;
if(n<m)//n最大
{
t=n;
n=m;
m=t;
}
while(1)
{
p=n-m;//结果
if(p==m)
break;
else
{
n=m;
m=p;
if(n<m)//n最大
{
t=n;
n=m;
m=t;
}
}
}
if(p==1)
printf("YES\n");
else
printf("POOR Haha\n");
}
return 0;
}
```原因:超时
2.过了的
#include<stdio.h>
/*
题目大意:就是一共有N个人在做游戏,有一个人每隔m个位置找一下N个人中的一个人
下面是否有手帕,找的次数可以为无限次,问是否能找到手帕
本质:问n,m是否有最大公约数(不可以为1)
解决方法:更相减损法(行不通)
辗转相除法:只要余数和除数
*/
int main()
{
int n,m;
while(scanf("%d%d",&n,&m)==2)
{
if(n==-1&&m==-1)
break;
int t;
if(n<m)
{
t=n;
n=m;
m=t;
}
while(1)
{
int r;
r=n%m;
if(r==0)
break;
else
{
n=m;
m=r;
if(n<m)
{
t=n;
n=m;
m=t;
}
}
}
if(m==1)
printf("YES\n");
else
printf("POOR Haha\n");
}
return 0;
}