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

来源:互联网 发布:三维软件 编辑:程序博客网 时间:2024/06/08 05:38

本题要求读入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 <iostream>#include <algorithm>using namespace std;int BinarySearch(int* data, int n, int score) {      int left = 0, right = n - 1;      int mid = 0;      while(left <= right) {          mid = (left + right) >> 1;          if(score < data[mid])              right = mid - 1;          else if(score > data[mid])              left = mid + 1;          else              break;      }      int num = 0;      if(data[mid] == score) {    //如果能找到同分的,开始左右找同一分数并确定个数;否则返回0个           for(int i = mid; i < n && data[i] == score; ++i)              ++num;          for(int i = mid - 1; i >= 0 && data[i] == score; --i)              ++num;      }      return num;  }  int main(){    int num;    cin>>num;    int grade[num];    for ( int i = 0 ; i < num ; i++){        cin>>grade[i];    }    sort(grade,grade+num);    int searchnum;    cin>>searchnum;    int searchgrade[searchnum];    int cnt[searchnum] = {0};    for ( int i = 0 ; i < searchnum ; i++){        cin>>searchgrade[i];        cnt[i] = BinarySearch(grade, num, searchgrade[i]);    }    cout<<cnt[0];    for ( int i = 1 ; i < searchnum ; i++){        cout<<" "<<cnt[i];    }    return 0; } 

这里写图片描述

1 0