牛客网: [编程题]三色球
有红、黄、蓝三种颜色的气球。
在牛客王国,1个红气球+1个黄气球+1个蓝气球可以兑换一张彩票。
2个红气球+1个黄气球可以兑换1个蓝气球。
2个黄气球+1个蓝气球可以兑换1个红气球。
2个蓝气球+1个红气球可以兑换1个黄气球。
现在牛牛有a个红气球,b个黄气球, c个蓝气球,牛牛想知道自己最多可以兑换多少张彩票。
func solve ( _ a: Int, _ b: Int, _ c: Int) -> Int {
let low = min(a, b, c)
var result = low
let r = a - low
let y = b - low
let blue = c - low
if r == 0{
result += min(y / 3, blue / 2)
}
else if y == 0{
result += min(blue / 3, r / 2)
}
else{
result += min(r / 3, y / 2)
}
return result
}
注意:
计算方式是,三个颜色,抵一张
先找出最小的,全部换掉,
然后打折兑换,
为什么 A / 3 , B / 2
a 1 + b 1 + c 1 = 抵用 1
c 1 = a 2 + b 1
总结下
a 3 + b 2 = 抵用 1
还要注意,
三种颜色,取 A 2 B 1 , 兑换 C 1,
排列组合有 6 种,只能取其中 3 钟
不可以随意换
例如,
开始第二种兑换,
r 为 0, 指望不上
只能在剩下的两种颜色中,固定的比例换
写下代码,就顺利成章了
-
第一种优先,
抵一张,消耗 3
-
然后第二种,
抵一张,消耗 5