每日一练 no.8

版权声明:本文为博主原创文章,如若转载请注明出处 https://blog.csdn.net/tonydz0523/article/details/83685653

问题:

已知有两支乒乓球队要进行比赛,每队各出三人; 甲队为a,b,c三人,乙队为x,y,z三人; 已抽签决定比赛名单。
有人向队员打听比赛的名单。a说他不和x比,c说他不和x,z比,请编程序找出三队赛手的名单。

解答:

本题看似很简单,c不和x,z,那么 只能c–y, a还不和x ,那么 只能 a–z,最后只剩下 b–x
但是编程解决就没那么简单,因为要兼顾各种情况,具有良好的适配性。
解决这个题目的逻辑很简单:找到所有组合方式,然后剔除掉不满足条件的,剩下的即为所求:

team1 = ['a', 'b', 'c']
team2 = ['x', 'y', 'z']
from itertools import permutations
team1_perm = permutations(team1, len(team1))
for item in team1_perm:
    pair = []
    for i in range(len(item)):
        pair.append([item[i], team2[i]])
    if not any([j in pair for j in [['a', 'x'], ['c', 'x'], ['c', 'z']]]):    
        print(pair)

结果:

[['b', 'x'], ['c', 'y'], ['a', 'z']]

猜你喜欢

转载自blog.csdn.net/tonydz0523/article/details/83685653