【招行笔试】信用卡推荐用户列表 数据岗01

■題目描述
现在信用卡开展营销活动,持有我行信用卡客户推荐新户办卡,开卡成功后可获得积分奖励。规定每个客户最多可推荐两个新户且一个新户只能被推荐一次。但允许链接效应,即若客户A推荐了新户B,新户B推荐新户C,则客户同时属于A和B的推荐列表。简单起见,只考虑一个老客户A作起点推荐的情况。编程计算推荐新户数不小于n的客户列表。
■输入描述
输入的第一行为以空格分隔的两个正整数,第一个表示原始推荐列表的 个数m,第二个表示n的取值。
其后m每行均为一个以空格分隔的原始推荐列表,第一列为推荐人,后面两列为被推荐人,若该推荐人只推荐了一个新户,则第三列以*替代。 推荐人和被推荐人均以大写字母表示,不同字母代表不同的人。
■输出描述:
在同一行输出符合条件的客户列表,无顺序要求,客户间以空格分隔。 若客户列表为空,则输出None。详见祥例。

示例1

输入:

5 2

A B C

C F *

B D E

D G *

E H I

输出

A B E

思路:在python中用dict遍历。不要忘记n=0的情况。

line1 = input()
line_num = int(line1.split()[0])
n = int(line1.split()[1])
#print(n)
line_list = []
for i in range(line_num):
    line = input()
    line_list.append(line)

if n == 0:
    result = []
    for user_list in line_list:
        user1, user2, user3 = user_list.split()
        if user1 not in result:
            result.append(user1)
        if user2 != "*":
            result.append(user2)
        if user3 != "*":
            result.append(user3)
    if result == []:
        outline = "None"
    else:
        outline = " ".join(result)
    print(outline)

else:
    dict = {}
    for user_list in line_list:
        user1, user2, user3 = user_list.split()
        dict.setdefault(user1, [])
        if user2 != "*":
            dict[user1].append(user2)
        if user3 != "*":
            dict[user1].append(user3)
    #print(dict)
    keys = dict.keys()
    for user1,list in dict.items():
        for item in list:
            if item in keys:
                dict[user1].extend(dict[item])
    #print(dict)

    result = []
    for user1 in dict:
        if len(dict[user1]) >= n:
            result.append(user1)
    #print(result)
    if result == []:
        outline = "None"
    else:
        outline = " ".join(result)
    print(outline)

猜你喜欢

转载自blog.csdn.net/weixin_40697217/article/details/89146119