PAT 乙级 1038.统计同成绩学生 C++/Java

题目来源

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

输入格式:

输入在第 1 行给出不超过 1 的正整数 N,即学生总人数。随后一行给出 N 名学生的百分制整数成绩,中间以空格分隔。最后一行给出要查询的分数个数 K(不超过 N 的正整数),随后是 K 个分数,中间以空格分隔。

输出格式:

在一行中按查询顺序给出得分等于指定分数的学生人数,中间以空格分隔,但行末不得有多余空格。

输入样例:

10
60 75 90 55 75 99 82 90 75 50
3 75 90 88

输出样例:

3 2 0

分析:

满分就100分,开个数组,下标是分数,保存的是该分数的人数

输入分数(下标),查询对应的人数就好了

注意 i != 0 先输出了空格,再输出查询数据,末尾不能有空格

C++实现:

 1 #include <iostream>
 2 using namespace std;
 3 int arr[101] = { 0 };
 4 int main()
 5 {
 6     int N;    //学生总人数
 7     int tmp;
 8     cin >> N;
 9     for (int i = 0; i < N; ++i)
10     {
11         cin >> tmp;
12         arr[tmp]++;
13     }
14     int K;
15     cin >> K;
16     for (int i = 0; i < K; ++i)
17     {
18         cin >> tmp;
19         if (i != 0)
20         {
21             cout << ' ';
22         }
23         cout << arr[tmp];
24     }
25     return 0;
26 }

 

Java实现:

 1 import java.io.BufferedReader;
 2 import java.io.IOException;
 3 import java.io.InputStreamReader;
 4 
 5 public class Main {
 6     public static void main(String[] args) throws IOException {
 7         //最后一个用例超时[60+s]
 8         BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
 9         int n = Integer.parseInt(in.readLine());
10         int[] score = new int[101];
11         String[] s = in.readLine().split("\\s+");
12         for (int i = 0; i < n; i++) {
13             int data = Integer.parseInt(s[i]);
14             score[data]++;
15         }
16         String[] s2 = in.readLine().split("\\s+");
17         for (int i = 1; i <= Integer.parseInt(s2[0]); i++) {
18             int data2 = Integer.parseInt(s2[i]);
19             if(i != 1){
20                 System.out.print(" ");
21             }
22             System.out.print(score[data2]);
23         }
24     }
25 }

 

posted @ 2019-10-24 20:09  47的菠萝~  阅读(237)  评论(0编辑  收藏  举报