693题解(模拟算法)
2024-07-29 16:54:49
发布于:浙江
25阅读
0回复
0点赞
经过仔细读题,我们可以整理出以下主要信息——
由输入可知:学生的数量,功课的数量,以及每个学生在每一门功课上的成绩。
至少在某一门功课上成绩为第一名的学生是“好学生”。
求出“好学生”的数量即可。
了解了这些信息,我们可以轻松地写出解题思路——
① 输入学生的数量和功课的数量。
② 输入每个学生的每一门功课的成绩,同时求每一门功课中的最高成绩。
③ 求出每门功课的最高分后,用遍历判断每个学生是否有功课的成绩是这门功课的最高分,如果是,那么他就是“好学生”。
④ 输出求出的好学生的数量。
一旦完整地写出了整道题的一种思路,就大胆去写代码吧。如果这种算法不能通过,我们再看看是否还有更好的算法。
#include <iostream>
using namespace std;
int best[105];//每门功课的最高分。
int scores[105][105];//每个学生的每个成绩。
int main(){
int n,m;
cin >> n >> m;
for(int i=1;i<=n;i++){//遍历每个学生的成绩。
for(int j=1;j<=m;j++){//遍历这个学生每一项功课的成绩。
char ch;
cin >> ch;//因为输入的成绩之间没有空格,所以需要用字符输入。
int score = ch-'0';
scores[i][j]=score;
if(score>best[j]){//更新最高分。
best[j]=score;
}
}
}
int sum=0;//好学生的个数
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
if(scores[i][j]==best[j]){//如果这个学生在任何一门功课上分数最高,
sum++;//那么他是“好学生”,
break;//并且不需要再判断这个人接下来的功课成绩。
}
}
}
cout << sum;
return 0;
}
经过测试,我们第一次写出的代码可以通过本道题的所有测试点。
这里空空如也
有帮助,赞一个