PAT B1072 开学寄语(C++)

PAT甲级目录 | PAT乙级目录

题目描述

B1072 开学寄语

解题思路

查找。用一个 hash 数组存放违禁品名单,一边遍历学生物品名单一边查看该物品是否为违禁品,如是则按要求输出,如不是继续。

易错点

  • printf(" %04d", item);
    • 输出的物品 id 格式

代码示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#include <iostream>
#include <string>
using namespace std;
int main(){
int N, M, check[10010] = {0}, item, total_stu = 0, total_item = 0;
cin >> N >> M;
for(int i = 0; i < M; i++){
cin >> item;
check[item] = 1;
}
for(int i = 0; i < N; i++){
string name;
int k, cnt = 0;
cin >> name >> k;
for(int j = 0; j < k; j++){
cin >> item;
if(check[item] == 1){
if(cnt == 0) cout << name << ":";
printf(" %04d", item);
cnt++;
}
}
if(cnt > 0) printf("\n");
total_stu = (cnt > 0) ? total_stu + 1 : total_stu; // 计数累加
total_item += cnt;
}
printf("%d %d\n", total_stu, total_item);
return 0;
}