学习C++从娃娃抓起!记录下蓝桥杯备考比赛学习过程中的题目,记录每一个瞬间。
附上汇总贴:蓝桥杯备考冲刺必刷题(C++) | 汇总-CSDN博客
【题目描述】
在古老的中国,有一个神秘的传说。在一座寺庙中,有四个精美的瓷瓶,每个瓷瓶中都装有神秘的珍珠。珍珠的数量可以用来衡量寺庙的强大。寺庙的主持阿坤老师有一种神秘的力量,他可以做出以下操作:
- 选择一个瓷瓶,将其中的珍珠增加 2 2 2个,同时将其他三个瓷瓶中的珍珠各减少 1 1 1个。这个操作只有在其他三个瓷瓶中的珍珠数量都大于零时才能进行。
阿坤老师的目标是使得四个瓷瓶中最多珍珠的数量尽可能大。
你的任务是,给定四个瓷瓶中珍珠的初始数量,计算阿坤老师通过以上操作后,四个瓷瓶中最多珍珠的数量最大可以是多少。
【输入】
输入的第一行包含四个非负整数,分别代表四个瓷瓶中珍珠的初始数量。输入的四个整数的范围都在区间
[
0
,
2
×
1
0
9
]
[0,2\times 10^9]
[0,2×109]中
【输出】
输出一行一个整数,表示阿坤老师通过操作后,四个瓷瓶中最多珍珠的数量最大可以是多少。
【输入样例】
3 3 3 3
【输出样例】
9
【代码详解】
#include <bits/stdc++.h>
using namespace std;
#define int long long
int a[6];
signed main()
{
for (int i=1; i<=4; i++) { // 输入4个瓶的珍珠数量
cin >> a[i];
}
sort(a+1, a+4+1); // 按照从小到大排序
if (a[2]==a[3] && a[3]==a[4]) { // 特判2、3、4三个瓶的数量相同
a[1] += a[2]*2; // 则最大值为a[1]增加后的值
cout << a[1] << endl;
return 0;
}
a[4] += a[1]*2; // 将a[1]置为0,计算a[1]、a[2]、a[3]
a[3] -= a[1];
a[2] -= a[1];
a[1] = 0;
if (a[2]==0) { // 如果a[2]为0
cout << a[4] << endl; // 最大值就是a[4]
} else if (a[2]%3==0) { // 如果a[2]是3的倍数
a[4] += (a[2]/3) * 3; // 则a[4]则增加3个倍数
cout << a[4] << endl;
} else { // 否则
a[4] += a[2]-1; // a[4]增加a[2]-1(通过数据找规律得到公式)
cout << a[4] << endl;
}
return 0;
}
【运行结果】
3 3 3 3
9