题目描述:
本题要求读入 N 名学生的成绩,将获得某一给定分数的学生人数输出。
-
输入格式:
输入在第 1 行给出不超过10^5的正整数 N,即学生总人数。随后一行给出 N 名学生的百分制整数成绩,中间以空格分隔。最后一行给出要查询的分数个数 K(不超过 N 的正整数),随后是 K 个分数,中间以空格分隔。 -
输出格式:
在一行中按查询顺序给出得分等于指定分数的学生人数,中间以空格分隔,但行末不得有多余空格。
解题思路:这道题看似很简单,但是最后一个测试点用常规做法肯定超时,需要想到将分数作为数组的下标,而对应存放的,是该分数出现的次数。这样一来,数组控制在101的大小,不管你来多少个数。并且,在查找的时候,用数组的下标进行查找就可以了。
易错点:这道题一开始用C++实现时用的cin和cout作为输入输出,结果最后一个测试用例还是超时,需要改为用scanf和printf作为本题的输入输出才行。
程序:
#include<iostream>
using namespace std;
int main(){
int N,K;
cin>>N;
int a[101]={0};
for (int i = 0; i < N; ++i)
{
int temp1=0;
scanf("%d",&temp1);
a[temp1]++;
}
cin>>K;
for (int i = 0; i < K; ++i)
{
int temp2=0;
scanf("%d",&temp2);
if (i)
{
printf(" %d",a[temp2]);
}else{
printf("%d",a[temp2]);
}
}
}