#include <iostream>
#include <iomanip>
#include <algorithm>
using namespace std;
int main()
{
//定义两个整数变量n和m,用于接收用户输入的二维数组的行数和列数
int n, m;
cin >> n >> m;
//定义二维整数数组A,用于存储用户输入的整数数据
//这里根据题意直接将数组大小预定义为100行20列
int A[100][20] = { 0 };
//定义一维双精度数组B,用于存储每行数据去掉第一个和最后一个元素后的平均值
double B[100] = { 0 };
//定义循环控制变量i、j、t,以及用于交换元素时临时存储数据的变量temp
int i, j, t, temp;
//以下嵌套的for循环用于从标准输入读取用户输入的数据,并将其存储到二维数组A中
//外层循环控制行数,内层循环控制列数,按照行数n和列数m,逐个读取整数元素并存入数组A相应位置
for (i = 0; i < n; i++)
{
for (j = 0; j < m; j++)
cin >> A[i][j];
}
//以下是冒泡排序的逻辑,目的是对二维数组A的每一行元素进行从小到大的排序
//外层循环控制对每一行都执行排序操作,总共执行n次,即对n行数据分别排序
for (i = 0; i < n; i++)
{
//中间层循环控制每一行需要比较的轮数,每一轮都会把当前最大的元素“冒泡”到当前行的末尾
//因为每比较一轮就能确定一个当前最大元素的最终位置,所以一共需要比较m - 1轮,就能排好序
for (j = 0; j < m - 1; j++)
{
//最内层循环用于相邻元素的比较和交换
//在每一轮比较中,从第一个元素开始,依次比较相邻的两个元素,如果前面的元素大于后面的元素,就交换它们的位置
//通过这样不断地比较和交换,每一轮结束后,当前未排序部分的最大元素就会“浮”到末尾
for (t = 0; t < m - 1 - j; t++)
{
if (A[i][t] > A[i][t + 1])
{
//如果当前元素大于下一个元素,则进行交换
temp = A[i][t];
A[i][t] = A[i][t + 1];
A[i][t + 1] = temp;
}
}
}
}
//定义变量sum,用于累加每行中间部分元素的和,以便后续计算平均值
int sum;
//以下循环用于计算二维数组A中每一行去掉第一个和最后一个元素后的平均值,并将结果存储到数组B中
//外层循环控制行,即对每一行都进行一次平均值的计算操作
for (i = 0; i < n; i++)
{
//对于每一行,在计算平均值之前,先将sum初始化为0,确保每次计算都是从新的一行开始累加
sum = 0;
//内层循环控制列,累加该行从第二个元素(索引为1)到倒数第二个元素(索引为m - 2)的值到sum中
for (j = 1; j < m - 1; j++)
sum = sum + A[i][j];
//计算当前行的平均值,通过将sum乘以1.0进行类型转换,使得除法运算按照浮点数规则进行,得到精确的平均值结果
//然后将平均值存储到数组B对应的位置,数组B的每个元素对应二维数组A中相应行的平均值
B[i] = (sum * 1.0) / ((m - 2) * (1.0));
}
//使用标准库中的max_element函数找出数组B中的最大值
//max_element函数接受两个迭代器参数,表示要查找的范围,这里传入B和B + n,表示查找数组B从开始到结束(包含n个元素)这个范围内的最大值
//通过fixed和setprecision(2)来设置输出格式,使得输出的浮点数保留两位小数,最后将找到的最大值输出显示
cout << fixed << setprecision(2) << *max_element(B, B + n);
return 0;
}
其中查找元素最大值max_element函数的头文件是#include <algorithm>
设置小数精度——setprecision的头文件是#include <iomanip>
冒泡排序(具体题目+C++代码)_c++桶排序代码-CSDN博客
标签:元素,洛谷,平均值,++,sum,深基,P5738,循环,数组 From: https://blog.csdn.net/2401_86982397/article/details/144223603