游游现在有a个'y',b个'o',c个'u',他想用这些字母拼成一个字符串。
三个相邻的字母是"you"可以获得2分,两个相邻的字母是"oo",可以获得1分。
问最多可以获得多少分?
第一行一个整数,代表询问次数。
接下来行,每行三个正整数
,用空格隔开。
输出行,代表每次询问的答案。
3 1 1 1 2 3 2 1 5 2
2 4 5
第一次询问,可以拼出"you",获得2分。第二次询问,可以拼出"oyouyou",获得4分。第三次询问,可以拼出"uooooyou",获得5分。
#include <iostream>
using namespace std;
int main()
{
int n;
cin >> n;
while(n--)
{
int a, b, c;
cin >> a >> b >> c;
int sum = 0;
while(a >= 1 && b >= 1 && c >= 1)
{
sum += 2;
a--;
b--;
c--;
}
if(b >= 2) sum += (b - 1);
cout << sum << endl;
}
return 0;
}
由题意得:
you 和 oo 是相互独立的
但是 you 的分值更高, 因此我们应该优先去拼凑 you, 然后再考虑 oo
import java.util.Scanner;
// 贪心
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int x = in.nextInt();
int a,b,c;
while(x--!=0){
a=in.nextInt();
b=in.nextInt();
c=in.nextInt();
int us = Math.min(a,Math.min(b,c));//先找有几个"you"
//再找有几个o,o的分数就是o被you拿走后剩余的个数-1,但是注意一点
//o可能为0,那么分数会计算成-1,此时应该为0
System.out.println((us*2)+Math.max(b-us-1,0));
}
}
} #include <iostream>
using namespace std;
int get_scores(int a, int b, int c) {
int scores = 0;
int you_num = min(min(a, b), c);
int oo_num = b - you_num - 1;
scores += 2 * you_num;
if (oo_num > 0)
scores += oo_num;
return scores;
}
int main() {
int q, a, b, c;
cin >> q;
for (int i = 0; i < q; i++) {
cin >> a >> b >> c;
cout <<get_scores(a, b, c) << '\n';
}
return 0;
} public static void main(String[] args) {
Scanner in = new Scanner(System.in);
// 注意 hasNext 和 hasNextLine 的区别
int Q = in.nextInt();
while (Q-- > 0) { // 注意 while 处理多个 case
int a = in.nextInt();
int b = in.nextInt();
int c = in.nextInt();
int t1 = Math.min(Math.min(a, b), c);
int t2 = Math.max(0, b - t1 - 1);
System.out.println(t1 * 2 + t2);
}
}