问题描述
小蓝有 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