L1-088 静静的推荐 - 团体程序设计天梯赛-练习集 (pintia.cn)
题解
这里代码很简单,但是主要是循环里面的内容很难理解,下面是关于循环里面的内容理解:
这里 n = 10
表示有 10 个学生,k = 2
表示企业接受 2 批次的推荐名单,s = 90
表示企业的 PAT 面试分数线。
下面我们逐行分析循环里的代码:
-
while(n--)
: 这个循环会执行n
次,每次处理一个学生的成绩。每执行一次循环,n
的值就会减 1,直到n
变为 0 时循环结束。 -
cin>>x>>y;
: 每次循环开始时,从输入中读取一个学生的天梯赛分数x
和 PAT 分数y
。 -
if(x>=175)
: 判断该学生的天梯赛分数是否不低于 175 分。只有满足这个条件,该学生才有可能被推荐。如果不满足,就跳过这个学生,继续处理下一个学生。-
例如,当读取到
169 91
时,因为x = 169 < 175
,所以这个学生不满足基本条件,不会进入后续的判断。
-
-
if(y>=s)
: 如果该学生的天梯赛分数不低于 175 分,接着判断其 PAT 分数是否达到或超过企业的面试分数线s
。如果满足这个条件,那么这个学生一定可以被推荐,将count
的值加 1。-
例如,当读取到
175 90
时,x = 175 >= 175
且y = 90 >= 90
,所以这个学生可以被推荐,count
从 0 变为 1。 -
再如,当读取到
256 100
时,x = 256 >= 175
且y = 100 >= 90
,count
再加 1,变为 2。
-
-
else if(score[x]<k)
: 如果该学生的天梯赛分数不低于 175 分,但 PAT 分数未达到面试分数线,那么就检查该天梯赛分数之前被推荐的次数score[x]
是否小于企业接受的推荐批次k
。如果小于,说明该天梯赛分数还可以再推荐一次,将score[x]
的值加 1 表示该分数又被推荐了一次,同时将count
的值加 1。-
例如,当读取到
175 88
时,x = 175 >= 175
但y = 88 < 90
,此时score[175]
初始值为 0,0 < 2
,所以该学生可以被推荐。score[175]
变为 1,count
变为 3。 -
当再次读取到
175 0
时,同样x = 175 >= 175
且y = 0 < 90
,此时score[175] = 1 < 2
,该学生也可以被推荐。score[175]
变为 2,count
变为 4。 -
当又读取到一个
175
分但 PAT 分数小于 90 的学生时,因为score[175] = 2
已经不小于k = 2
了,所以这个学生就不能被推荐了。
-
代码
#include<bits/stdc++.h>
using namespace std;
int main(){int n,k,s;cin>>n>>k>>s;int x,y;int count=0;int score[291]={0};for(int i=0;i<n;i++){cin>>x>>y;if(x>=175){if(y>=s){count++;}else if(score[x]<k){score[x]++;count++;}}}cout<<count;return 0;
}