问题 A: 谁是你的潜在朋友

“臭味相投”——这是我们描述朋友时喜欢用的词汇。两个人是朋友通常意味着他们存在着许多共同的兴趣。然而作为一个宅男,你发现自己与他人相互了解的机会 并不太多。幸运的是,你意外得到了一份北大图书馆的图书借阅记录,于是你挑灯熬夜地编程,想从中发现潜在的朋友。
首先你对借阅记录进行了一番整理,把N个读者依次编号为1,2,…,N,把M本书依次编号为1,2,…,M。同时,按照“臭味相投”的原则,和你喜欢读同一本书的人,就是你的潜在朋友。你现在的任务是从这份借阅记录中计算出每个人有几个潜在朋友。

输入
每个案例第一行两个整数N,M,2 <= N ,M<= 200。接下来有N行,第i(i = 1,2,…,N)行每一行有一个数,表示读者i-1最喜欢的图书的编号P(1<=P<=M)

输出
每个案例包括N行,每行一个数,第i行的数表示读者i有几个潜在朋友。如果i和任何人都没有共同喜欢的书,则输出“BeiJu”(即悲剧,^ ^)

#include<cstdio>
#include<cstring>
int main()
{
	int N,M;
	while(scanf("%d%d",&N,&M)!=EOF)
	{
		int hashTable[201]={0};//令每个hashtable初始化0
		int booknum[N];
		for(int i=0;i<N;i++)
		{
			scanf("%d",&booknum[i]);//输入书的编号
			hashTable[booknum[i]]++;//精髓,如果只出现一次就是1,否则大于1
		}
		for(int i=0;i<N;i++)
		{
			if(hashTable[booknum[i]]==1)//如果书还是初始化1则悲剧
			printf("BeiJu\n");
			else  if(hashTable[booknum[i]]>1) //大于1说明有相同的
			printf("%d\n",hashTable[booknum[i]]-1);
		}
	}
	return 0;
}
		
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
通过Python递归找出朋友朋友是一种基于深度优先搜索的方法,可以遍历一个人的朋友列表,然后再遍历其朋友朋友列表,以此类推。 首先,我们需要定义一个函数,命名为find_friends_recursive,该函数接受两个参数:一个人的名字和一个包含所有人的字典。字典的键是人的名字,值是一个列表,包含该人的朋友。函数的返回值是一个集合,包含该人的所有朋友朋友。 在函数的定义中,我们首先定义一个空集合,命名为result。然后,我们进入递归的部分: 1. 首先,我们将该人的朋友列表命名为friends,并使用一个for循环遍历friends。 2. 对于每个朋友,我们判断该朋友是否在字典中: a. 如果朋友在字典中,我们将该朋友朋友列表命名为fof(friends of friends)。 b. 然后,我们将fof中的所有人添加到result中。 c. 最后,对于fof中的每个人,我们递归调用find_friends_recursive函数,传入该人的名字和字典。 3. 返回result集合。 完成上述操作后,我们可以通过调用find_friends_recursive函数,传入某个人的名字和包含所有人的字典,来获取该人的朋友朋友。 例如,如果有如下的人和朋友关系: people = { 'Alice': ['Bob', 'Carol'], 'Bob': ['Alice', 'Dave'], 'Carol': ['Alice', 'Eve'], 'Dave': ['Bob'], 'Eve': ['Carol'] } 我们可以调用find_friends_recursive('Alice', people)来获取Alice的朋友朋友,函数将返回一个集合,包含Bob、Carol和Dave。 需要注意的是,递归算法存在一定的复杂度和潜在的死循环风险,因此在处理大规模数据或者循环关系较复杂的情况下,需要谨慎使用,可以考虑使用其他更高效的算法。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值