PAT (Basic Level) Practice (中文)1038 统计同成绩学生

1038 统计同成绩学生(20)(20 分)

本题要求读入N名学生的成绩,将获得某一给定分数的学生人数输出。

输入格式:

输入在第1行给出不超过10^5^的正整数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<iostream>
#include<stdio.h>
using namespace std;
int main()
{
    int num;
    cin>>num;
    //用来存放成绩
    int ScoreNum[101]={0};
    //输入成绩 
    int tempScore=0;
    //数组下标表示这个数字 里面的内容表示数字的个数 
    for(int i=0;i<num;i++)
    {
        cin>>tempScore;
        ScoreNum[tempScore]++;
    }
    //查找个数 
    int findNum;
    cin>>findNum;
    //初始化 
    int *findStuScore=new int [findNum]; 
    //输入待查找成绩
    for(int i=0;i<findNum;i++)
    {
        cin>>findStuScore[i];
    }

    //现在改为对每个查找成绩,从学生成绩遍历,如果找到,就+1,如果没有就置为0
    for(int j=0;j<findNum;j++)
    {
        bool Aldfind=false;
        //如果这个成绩存在,就把它的个数覆盖为查找成绩 
        if(ScoreNum[findStuScore[j]]>0)
        {
            //查找结果+1 
            findStuScore[j]=ScoreNum[findStuScore[j]];  
            Aldfind=true;
        }
        //如果没有找到,当前结果置为-1 
        if(Aldfind==false)
        {
            findStuScore[j]=-1;
        } 
    }


    //输出最后结果 
    bool iscout=false;
    for(int j=0;j<findNum;j++)
    {
        if(iscout==true) 
        {
            cout<<" ";  
        }
        if(findStuScore[j]>0||findStuScore[j]==-1)
        {
            if(findStuScore[j]==-1)
            {
                cout<<0;
                iscout=true;
            }
            else
            {
                cout<<findStuScore[j];
                iscout=true;
            }
        }
    }
}

猜你喜欢

转载自blog.csdn.net/hhmy77/article/details/81666301