高考组数。

题目名字

高考组题

题意

  1. 给定 n 组数,每组数中有 k 个数,求每组 k 个数的平均值,并输出平均值最大的两组数的编号,如果平均值相同就按id的先后输出。
  2. 要求 k 个数的平均值,我们可以用一个变量累加后除以 k,再建立变量来存储输入的先后,也就是编号。

思路

  1. 结构体里面定义两个变量,分别表示每组数的编号和平均值
  2. 再写一个函数来设定排序方式,先判断平均值是否相等,如果相等就按编号从小到大排序,否则就按平均值从大到小排序
  3. 最后输出数组的第一项和第二项的编号即可。

坑点

  1. 浮点数要除以浮点数,才能找到平均数

算法一:结构体+sort排序

时间复杂度

$

实现步骤
  1. 定义结构体
  2. 结构体里面定义两个变量,分别表示每组数的编号和平均值
  3. 再写一个函数来设定排序方式,先判断平均值是否相等,如果相等就按编号从小到大排序,否则就按平均值从大到小排序
  4. 最后输出数组的第一项和第二项的编号即可。
代码
#include
using namespace std; 
int n,k;
struct st{
	int id,pjz;
}a[105];
int cmp(st x,st y){
	if(x.pjz==y.pjz) return x.id<y.id;
	else return x.pjz>y.pjz;
}
int main(){
	cin>>n>>k;
	for(int i=1;i<=n;i++){
		int ans=0;
		a[i].id=i;
		for(int j=1;j<=k;j++){
			int sum;
			cin>>sum;
			ans+=sum;
		}
		a[i].pjz=ans*1.0/k*1.0;
	}
	sort(a+1,a+n+1,cmp);
	cout<<a[1].id<<endl<<a[2].id;
	return 0;
}
 
 

总结

多读几遍,理解题意,才能知道需要什么步骤

你可能感兴趣的:(高考)