卡片 蓝桥杯 Python组

问题描述

小蓝有 k 种卡片, 一个班有 n 位同学, 小蓝给每位同学发了两张卡片, 一 位同学的两张卡片可能是同一种, 也可能是不同种, 两张卡片没有顺序。没有 两位同学的卡片都是一样的。
给定 n, 请问小蓝的卡片至少有多少种?

输入格式

输入一行包含一个正整数表示 n 。

输出格式

输出一行包含一个整数, 表示答案。

过程

下面是我的总想法,结果全都过了。

#k种,没说限定几张
n=int(input())
#k 不可能大于n/2
mink=n//2

def Combinatorial(n, m):#高中的组合数 C(n,m)
    Min = min(m,n-m)
    res = 1
    for i in range(0, Min):
        res = res * (n-i) / (Min-i)
    return  int(res)
#假设k=n//2,一样的数像    
#(1,1) (2,2) (3,3) 这些都可以分给一半的人的,还有其它组合
for i in range(1,n//2+1):
    #k=i
    temp=n-i#出去(x,x)这些相同的,还有多少个人没卡片
    #高中学的组合数
    temp1=Combinatorial(i,2)
    if temp1>=temp:
        mink=i
        break
print(mink)

除去相同的,对剩下的进行排列,这就和高中学的组合数非常像了,直接套用公式就可以得出k种卡牌有多少种组合。
在这里插入图片描述

我同学的想法更简单点

在这里插入图片描述
在这里插入图片描述

总结

我还是那么喜欢 for
在这里插入图片描述

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值