Rational Resistance

来源:互联网 发布:初中数学答题软件 编辑:程序博客网 时间:2024/06/05 14:16

迈克希望组装一些电子器件,他有无限多的1Ω的单位电阻,现在他想要用最少的单位电阻组装成一个电阻为a/b的电子器件,单位电阻之间可以串联也可以并联

[Intput]

输入一行两个正整数a,b(1 ≤ a, b ≤ 1018),表示要组装的值a/b,为最简分数,数据保证有解。

 

[Output]

输出一行一个答案。

 

[Sample ]

Input

Output

1 1

1

3 2

3

199 200

200

 

[Hit]

第一个样例,一个电阻足够;

第二个样例,2个并联,然后和一个串联。

第三个样例,199个串联,然后和一个并联。


思路:

可以推出递归公式:此时的电阻值为x/y,并联下一个电阻值为(y-x)/x,串联为(x-y)/y;
可以发现求串联的电路和求并联的电路是等价的,只是变量交换了位置。所以我们可以预先
判断大小并交换位置,就可以压缩为一个求值函数了。
边界为当y等于1时,返回x的值(就相当于此时的单个串并联的个数)。 


代码:

#include<cstdio>
#include<cstring>
#include<iostream>
using namespace std;
long long a,b;


long long find(long long x,long long y)
{
if(y==1)return x;
else return  x/y+find(y,x%y);
}


int main()
{
scanf("%I64d%I64d",&a,&b);
if(a>=b)
{
printf("%I64d",find(a,b));
}
if(a<b)
{
printf("%I64d",find(b,a));
}
return 0;
}

0 0
原创粉丝点击