秋招笔试算法题——电容充电
牛客网《笔试真题精选2019》
字节跳动2018秋招笔试题4
【题目描述】有一台用电容组成的计算器,其中每个电容组件都有一个最大容量值(正整数)。
对于单个电容,有如下操作指令:
指令1:放电操作——把该电容当前电量值清零
指令2:充电操作——把该电容当前电量补充到其最大容量值
对于两个电容A和B,有如下操作指令:
指令3:转移操作——从A中尽可能多的将电量转移到B,转移不会有电量损失,如果能够充满B的最大容量,那剩余的电量仍然会留在A中
现在已知有两个电容,其最大容量分别为a和b其初始状态都是电量值为0,希望通过一系列的操作可以使其中某个电容(无所谓哪一个)中的电量值等于c(c也是正整数),这一系列操作所用的最少指令条数记为M,如果无论如何操作,都不可能完成,则定义此时M=0。
显然对于每一组确定的a、b、c,一定会有一个M与其对应。
输入描述:
每组测试样本的输入格式为:
第一行是一个正整数N
从第二行开始,每行都是3个正整数依次组成一组a、b、c,一共有N组
输出描述:
输出为N行,每行打印每一组对应的M
备注:
数据范围:
N: 0 < N < 100 0 < N < 100 0<N<100
a、b、c:
0 < a 、 b 、 c < 1 0 5 ( 50 % ) 0 < a、b、c < 10^5(50\%) 0<a、b、c<105(50%)
0 < a 、 b 、 c < 1 0 7 ( 30 % ) 0 < a、b、c < 10^7(30\%) 0<a、b、c<107(30%)
0 < a 、 b 、 c < 1 0 9 ( 20 % ) 0 < a、b、c < 10^9(20\%) 0<a、b、c<109(20%)
输入示例:
2
3 4 2
2 3 4
输出示例:
4
0
说明:
对于(3,4,2),最少只需要4个指令即可完成:
(设最大容量为3的是A号电容,另一个是B号电容)
- 充电A
- 转移A->B
- 充电A
- 转移A->B
此时A中当前电量为2,操作完成,所以输出4。
对于(2,3,4),显然不可能完成,输出0。
解析:
若 c > a c > a c>a且 c > b c > b c>b,则显然不可能完成,M为0。
若 c = a c = a c=a或 c = b c = b c=b,则显然一次操作可完成,M为1。
现在考虑剩余情况,即 c < M a x ( a , b ) c < Max(a, b) c&