W
e
l
c
o
m
e
: )

洛谷题解:B3827 [NICA #2] 高考组题

题目传送门

简化题意

现在有 \(n\) 道题,每道题都有 \(k\) 个指标评判它各个方面的维度,那么这个题被放入高考卷的必要性就是这 \(k\) 个指标的平均值,输出必要性前二高的题(如果必要性相等,先出现的排在前面)。

题目思路

第一步:求平均值

根据简化题意我们知道,这其实就是先求出一行的平均值,然后在去找平均值前二大的题,对于求平均值的这一步,我们可以便输入,边求平均值。

代码如下:

for(int i=1;i<=n;i++){
	int sum=0,m;//sum要赋值为0
	for(int j=1;j<=k;j++){
		cin>>m;//输入
		sum+=m;//求总和
	} 
	a[i]=1.0*sum/k;//a数组用来存储每行的平均值
   //上面的1.0必须要写,并且要写在最前面
}
//平均值=总和/个数

第二步:找出前二大必要性

这个步骤非常简单,我们只需要设一个用来指向必要性最大值的变量,遍历存储必要性的数组,如果找到比它大的,就让指向最大值的变量指向这个位置的下标。遍历完数组后,输出这个最大值,这样就找到了最大值。然后把最大值(在必要性数组里的)置为-1,再重复以上操作,就可以输出第二大值啦(因为最大值已经输出并置为-1)。

注意,因为我们并没有改变这些题目的顺序,所以不用去管有有两个第二大值二输出后面的那个。

完整代码

#include<bits/stdc++.h>
using namespace std;
double a[100005];
int main(){
	int n,k;
	cin>>n>>k;
	for(int i=1;i<=n;i++){
		int sum=0,m;
		for(int j=1;j<=k;j++){
			cin>>m;
			sum+=m;
		} 
		a[i]=1.0*sum/k;//这里的1.0很重要
	}
  
	int m=1;//指向最大值的变量
	for(int i=2;i<=n;i++){
		if(a[i]>a[m])m=i;//找第一大值
	}
	cout<<m<<endl;
	a[m]=-1;
  
	m=1;
	for(int i=2;i<=n;i++){
		if(a[i]>a[m])m=i;//找第二大值
	}
	cout<<m<<endl;
	return 0;
}

本人第一篇自己的题解

posted @ 2024-03-23 21:11  YYM_CAFE  阅读(105)  评论(0)    收藏  举报