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 }