「笔试刷题」:游游的you

83 阅读2分钟

一、题目

游游现在有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);
        }



    }
}

以上就是本篇博客的全部内容啦,如有不足之处,还请各位指出,期待能和各位一起进步!