内蒙古大学IMCPC 2019 复现 Problem A 能量不守恒定律

题目描述

这个世界上有两种能量,a能量和b能量。

小花作为一个魔法师,每天的工作就是根据现有的能量资源去产生新的能量资源。众所周知的是,由于能量不守恒定律,小花所拥有的能量会越来越多!

产生能量的规则是这样的:小花每一天只能释放两个魔法,第一个是元素克隆,可以将b能量克隆相同的数目,并转变为a能量。第二个是能量跃迁,会根据你现有的a能量和b能量的数目,产生a和b的最大公约数的b能量(不消耗原来的能量)。

小花会严格按照魔法守则里的规定,即每天先做元素克隆,再做能量跃迁。

请问第k天之后,小花拥有a,b能量的数目分别是多少。

输入

第一行一个整数T,代表T组数据。(T<=100)

接下来每行3个数,x,y,k。代表a能量最初有x,b能量最初有y,询问第k天。(1<=x,y,k<=40)

输出

对于每组数据,输出两个数,以空格隔开,代表第k天放完魔法以后,拥有的a,b能量数,占一行。

样例输入

1
12 11 3

样例输出

48 14

考点
  1. 最大公约数求法

代码片段

#include
#include
#include
using namespace std;
int main()
{
	long long int T,x,y,k,i,j,a,b;
	cin>>T;
	while(T--)
	{
		cin>>x>>y>>k;
		for(int i=0;i<k;i++)
		{
			x+=y;
			a=x;
			b=y;
			if(a>b) swap(a,b);
			while(b%a!=0)//这里求最大公约数
			{
				long long int tmp;
				tmp=b;
				b=a;
				a=tmp%a;
			}
			y+=a;

		}
			cout<<x<<" "<<y<<endl;
	}
}

共同进步哦

你可能感兴趣的:(内蒙古大学IMCPC 2019 复现 Problem A 能量不守恒定律)