题目描述
宇宙集团对QIT的课程做了一个满意度调查,一共在校园内抽取了N个同学,对本学期的M种课程进行满意度调查。宇宙集团的小Y想知道,有多少门课是被所有调查到的同学都喜欢的。
输入描述:
第一行输入两个整数N, M(1 <= N, M <= 1000) 接下来的N行里, 每行的开头有一个整数A(0 <= A <= M),表示这个同学喜欢的课程数量,接下来的A个元素表示他所喜欢的课程编号(1 <= 编号 <= M),每个元素之间以空格间隔。
输出描述:
输出一个整数表示答案。
示例1
输入
5 5
4 2 3 4 5
4 1 3 4 5
4 1 2 4 5
4 1 2 3 5
4 1 2 3 4
输出
0
说明
没有一门课被所有同学都喜欢。
示例2
输入
3 4
2 1 3
3 1 2 3
2 3 2
输出
1
说明
只有1门课被所有同学都喜欢。
思路
先创建整数N,M输出,以及一个数组arr.之后,对开头的整数A(同学喜欢的课程数量)进行判断,如果A==0,跳过;反之,往下依次执行每位同学喜欢的课程编号.这里,我们用数组序号代表同学喜欢的编号进行累加计算,若喜欢编号1一次,数组arr[1] ++ ,喜欢编号2一次,则数组arr[2] ++,所有同学循环下来,若课程被所有人同学喜欢,那么arr[课程编号]的值与同学数是相等的.最后,设置一个num,判断结果,循环判断每个数组的值是否等于同学数,若等于,则该课程被所有同学喜欢,num++.最后,循环结束,输出结果num.
代码
import java.util.Scanner ; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in) ; int N = sc.nextInt() ; //同学数 int M = sc.nextInt() ; //课程数 int [] a = new int [M + 10] ; //索引序号代表每门课程的编号 for (int i = 0; i < N; i++) { //输入、判断 int A = sc.nextInt() ; //该同学喜欢几门课程 if(A == 0) {//如果他啥也不喜欢,跳过 continue; }else{ for (int j = 0; j < A ; j++) { //该同学喜欢哪些课程,统计一下 if(sc.hasNext()){ //输入多组数据 int c = sc.nextInt() ; a[c] ++ ; // 喜欢哪号课程,相对应数组的索引就+1 ; } } } } int num = 0 ; // 计数用 for (int i = 1; i <= M; i++) { if(a[i] == N) //该数组索引的值等于同学数,说明这门课程被所有同学喜欢 num ++ ; } System.out.print(num) ; } }