一、题目
游游现在有a个'y',b个'o',c个'u',他想用这些字母拼成一个字符串。
三个相邻的字母是"you"可以获得2分,两个相邻的字母是"oo",可以获得1分。
问最多可以获得多少分?
输入描述:
第一行一个整数qqq,代表询问次数。
接下来qqq行,每行三个正整数a,b,ca,b,ca,b,c,用空格隔开。
1≤q≤1051\leq q \leq 10^51≤q≤105
1≤a,b,c≤1091\leq a,b,c \leq 10^91≤a,b,c≤109
输出描述:
输出qqq行,代表每次询问的答案。
示例1
输入
3 1 1 1 2 3 2 1 5 2
输出
2 4 5
说明
第一次询问,可以拼出"you",获得2分。
第二次询问,可以拼出"oyouyou",获得4分。
第三次询问,可以拼出"uooooyou",获得5分。
二、思路解析
这道题也是利用到了 贪心 的思想。
因为 "you" 需要三种字母都有,而 "oo" 只需要两种字母。所以我们要优先判断是否能凑出 “you”,然后再判断 “oo”。
然后就到了计数的时候了,“you” 的个数取决于 a, b, c 中的最小值;而 “oo”即剩余的'b'字母数量减去一个 "x"(其中"x"为三种字母中数量最小的那个)。
最后输出得分即可。
具体实现请看下面代码👇
三、完整代码
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int q = in.nextInt();
int a, b, c;
int x, y;
while(q-- != 0){
a = in.nextInt();
b = in.nextInt();
c = in.nextInt();
x = Math.min(a, Math.min(b, c));
y = Math.max(b - x - 1, 0);
System.out.println(x * 2 + y);
}
}
}
以上就是本篇博客的全部内容啦,如有不足之处,还请各位指出,期待能和各位一起进步!