题目描述
本题要求读入N名学生的成绩,将获得某一给定分数的学生人数输出。
输入描述
输入在第1行给出不超过105的正整数N,即学生总人数。随后1行给出N名学生的百分制整数成绩,中间以空格分隔。最后1行给出要查询的分数个数K(不超过N的正整数),随后是K个分数,中间以空格分隔。
输出描述
在一行中按查询顺序给出得分等于指定分数的学生人数,中间以空格分隔,但行末不得有多余空格。
输入例子
10
60 75 90 55 75 99 82 90 75 50
3 75 90 88
输出例子
3 2 0
我的代码
#include<stdio.h>
int main(){
long n1,n2,i,j,k;
int score[100000],find[100000],t[100000];
scanf("%d",&n1);
for(i=0;i<n1;i++){
scanf("%d",&score[i]);
}
scanf("%d",&n2);
for(i=0;i<n2;i++){
scanf("%d",&find[i]);
}
for(i=0;i<n2;i++){
for(j=0;j<n1;j++){
if(find[i]==score[j]){
t[i]++;
}
}
if(i<=n2-2){
printf("%d ",t[i]);
}
}
printf("%d",t[n2-1]);
return 0;
}
我的分析
其实这道题我在牛客网上是AC,但是正在PTA上面的最后一个测试点因为运行超时没有过。这道题的整体思路就是用两个循环来进行是这个分数的查找,然后使用数组t[ ]来存储找到的人数,最后在输出就可以了。
正确代码
#include <stdio.h>
#include <stdlib.h>
int main()
{
int n,i,m,temp;
int a[100000]={0}; //分数的计数
int b[100000]={0}; //存放需要查找的分数
scanf("%d",&n); //输入总个数
for(i=0;i<n;i++)
{
scanf("%d",&temp); //先用temp来记住分数
a[temp]++; //用数组的下表来代表分数,直接计数
}
scanf("%d",&m);
for(i=0;i<m;i++)
{
scanf("%d",&b[i]); //存储要查找的分数
}
for(i=0;i<m;i++)
{
if(i>0)
{
printf(" "); //最后一个数不能有“ ”
}
printf("%d",a[b[i]]); //输出个数
}
return 0;
}