题目描述
最近,三师弟发现自己的棒棒糖越来越多了。于是,想出了一个主意:决定和小伙伴大师兄做个游戏,顺便分些糖果出去(估计脑洞大开了=_=)。
游戏规则是这样的。
桌上有两堆糖果,数量分别为a、b(0<=a,b<=200)。两人轮流取糖,每次从数量较多的一堆中取出数量为两堆糖果数量的最大公约数的糖果。当桌上只有一堆糖果时,轮到的那个人直接拿走。当所有糖果都被拿完,游戏结束。
大者为大,大师兄先拿。
问游戏结束时,大师兄和三师弟拿到的糖果数分别为多少?
输入
输入数据有多组,每组数据输入两个数,分别代表桌上的两堆糖果数。
输入以0 0结束(该组数据不做处理)。
输出
游戏结束时,大师兄和三师弟分别拿到的糖果数。
样例输入
2 4
4 2
9 1
0 0
样例输出
4 2
4 2
5 5
参考答案
#include <stdio.h>
int fac(int a,int b)//利用函数求出最大公约数
{
int c;
while(b!=0)
{
c=a%b;
a=b;
b=c;
}
return a;
}
int main()
{
int a,b,c,t,m,n,i;
while(scanf("%d%d",&a,&b),a||b)//输入0时结束程序
{
m=0;n=0;
for(i=1;;i++)
{
if(a==0||b==0)//其中一堆为0时,跳出循环
break;
if(a<b)
{t=a;a=b;b=t;}//把a当成做大
if(a!=0&&b!=0)
{
c=fac(a,b);
if(i%2!=0)//大师兄先拿,记大师兄为奇数
m+=c;//统计大师兄拿的个数
else
n+=c;//统计三师兄拿的个数
a=a-c;;//最多的一堆糖减去拿走的
}
}
if(i%2!=0)
m=m+a+b;//剩一堆的话看临到谁谁全拿走
else
n=n+a+b;
printf("%d %d\n",m,n);
}
return 0;
}
int fac(int a,int b)//利用函数求出最大公约数
{
int c;
while(b!=0)
{
c=a%b;
a=b;
b=c;
}
return a;
}
int main()
{
int a,b,c,t,m,n,i;
while(scanf("%d%d",&a,&b),a||b)//输入0时结束程序
{
m=0;n=0;
for(i=1;;i++)
{
if(a==0||b==0)//其中一堆为0时,跳出循环
break;
if(a<b)
{t=a;a=b;b=t;}//把a当成做大
if(a!=0&&b!=0)
{
c=fac(a,b);
if(i%2!=0)//大师兄先拿,记大师兄为奇数
m+=c;//统计大师兄拿的个数
else
n+=c;//统计三师兄拿的个数
a=a-c;;//最多的一堆糖减去拿走的
}
}
if(i%2!=0)
m=m+a+b;//剩一堆的话看临到谁谁全拿走
else
n=n+a+b;
printf("%d %d\n",m,n);
}
return 0;
}