这道是入门题,非常适合发题解,看懂的人多。
一共有 n 轮射击,每一轮都打 3 枪。
每一轮里面,先把这三个成绩排个顺序,分出:本轮最大值、本轮最小值、本轮中间那个数(中间值)。
算出三个东西:
a:把每一轮的最大值全部收集起来,在这一堆最大值里面,找最小的那一个。
b:把每一轮的最小值全部收集起来,在这一堆最小值里面,找最大的那一个。
c:把每一轮的中间值全部收集起来,求它们的平均数,最后保留一位小数。
最后依次输出 a、b、c。
拿样例简单走一遍
输入 3 轮:
第一轮:1,2,3 → 最小 1,中间 2,最大 3
第二轮:6,4,2 → 最小 2,中间 4,最大 6
第三轮:6,6,6 → 最小 6,中间 6,最大 6
收集每轮最大值:3,6,6 → 里面最小是 3 → a=3
收集每轮最小值:1,2,6 → 里面最大是 6 → b=6
收集每轮中间值:2,4,6 → 求平均:(2+4+6)÷3=4.0 → c=4.0
输出:3 6 4.0,和样例完全对上。
做题步骤总结
① 循环 n 次,每次读入三个数字
② 每一组三个数排序,取出本轮最大、最小、中间数,分别存到三个列表里
③ a = 最大值列表里面最小的数
④ b = 最小值列表里面最大的数
⑤ c = 中间值列表全部加起来 ÷ 数量,保留 1 位小数
⑥ 按顺序打印 a,b,c
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n;
cin >> n;
vector<int> maxs, mins, mids;
for(int i = 1; i <= n; i++)
{
int x[3];
cin >> x[0] >> x[1] >> x[2];
sort(x, x + 3);
mins.push_back(x[0]);
mids.push_back(x[1]);
maxs.push_back(x[2]);
}
int a = *min_element(maxs.begin(), maxs.end());
int b = *max_element(mins.begin(), mins.end());
double sum = 0;
for(auto t : mids) sum += t;
double c = sum / mids.size();
cout << a << " " << b << " " << fixed << setprecision(1) << c;
return 0;
}
所以总的来说,题目并不是超级难。