📜  翻牌后的最低分数

📅  最后修改于: 2021-04-30 02:23:12             🧑  作者: Mango

给定N张卡片,每张卡片的正面和背面均印有正整数(可能不同)。可以翻转任意数量的卡,然后从卡组中选择一张卡。如果所选卡片背面的数字X不在任何卡片的正面,那么我们说数字X很好。任务是找到最合适的最小编号。如果没有数字好,则打印0

注意:翻页会交换卡上的正反数字,即正反面现在是正面的值,反之亦然。

例子:

方法:

  • 如果一张纸牌的正面和背面写有相同的值K ,那么无论您翻动这张卡多少次,结果都将是相同的,因此K不能成为答案。
  • 正面和背面写有不同数字的所有其他卡都可以作为答案的候选者,无论在front阵列中数字K重复多少次,只需翻转所有卡,就不会再有写有K的卡了在正面,那么我们可以简单地选择任何背面写有K的卡片(最少),这就是答案。
  • 现在问题减少到找到所有数字K1,K2,…,Kn,这样它们就不会在任何卡上重复了,然后在写在K1,K2,…,Kn背面的所有数字中,找到最小值。
  • 如果无法得到结果,则打印0

下面是上述方法的实现:

# Python3 iomplementation of the approach
import itertools
  
MAX = 9999
  
def flipgame(fronts, backs):
  
    same = {k for i, k in enumerate(fronts) if k == backs[i]}
      
    # Initialize answer to arbitrary value
    ans = MAX
      
    for k in itertools.chain(fronts, backs):
        if k not in same:
            ans = min(ans, k)
  
    # Return final answer
    return ans % MAX
  
# Driver Code
fronts = [1, 2, 4, 4, 7]
backs = [1, 3, 4, 1, 3]
print(flipgame(fronts, backs))
输出:
2