迈克希望组装一些电子器件,他有无限多的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;
}
本文介绍了一种方法,通过使用无限多个1Ω的单位电阻,实现组装成任意给定阻值(a/b形式,a、b为不超过10^18的正整数)的电子器件。通过串联和并联操作,可以实现阻值的精确调整。重点讨论了递归公式和判断逻辑,以最小化所需单位电阻的数量。
377

被折叠的 条评论
为什么被折叠?



