【问题描述】
两个人是朋友通常意味着他们存在着许多共同的兴趣。然而作为一个宅男,你发现自己与他人相互了解的机会并不太多。幸运的是,你意外得到了一份湖大图书馆的图书借阅记录,于是你挑灯熬夜地编程,想从中发现潜在的朋友。
首先你对借阅记录进行了一番整理,把N个读者依次编号为1,2,…,N,把M本书依次编号为1,2,…,M。同时,按照“臭味相投”的原则,和你喜欢读同一本书的人,就是你的潜在朋友。你现在的任务是从这份借阅记录中计算出每个人有几个潜在朋友。
【输入形式】
每个案例第一行两个整数N,M。接下来有N行,第i(i = 1,2,…,N)行每一行有一个数,表示读者i-1最喜欢的图书的编号P(1<=P<=M)
【输出形式】
每个案例包括N行,每行一个数,第i行的数表示读者i有几个潜在朋友。如果i和任何人都没有共同喜欢的书,则输出“BeiJu”(即悲剧,^ ^)
【样例输入】
4 5
2
3
2
1
【样例输出】
1
BeiJu
1
BeiJu
总体思路:
这道题我的主要想法还是遍历吧,声明了两个数组Array和Array2,Array用于存储原始数据,Array2用于存储该读者存在几位潜在朋友。对Array进行双重遍历,若Array[i] = Array[j]则Array2[i]加一。
代码如下:
package week1.demo;
import java.util.Scanner;
public class Hwork5 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int[] Array = new int[n];
int[] Array2 = new int [n];//声明两个数组
for(int i=0;i<n;i++){
Array[i] = sc.nextInt();
}
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
{
if(Array[i] == Array[j]) Array2[i]++;//若出现两个相等的书籍编号,则第i为读者的潜在朋友数加一。
}
}
for(int i=0;i<n;i++){
if(Array2[i] == 1) System.out.println("BeiJu");//因为遍历时将该读者自己也遍历进去了,因此每个人至少会有一位和自己喜欢的书籍编号相同的情况。于是Array2[i]=1时代表该读者的朋友只有他自己...输出BeiJu
else System.out.println(Array2[i] - 1);//若存在朋友,则朋友数也要-1,即减掉自己作为自己的朋友
}
}
}