C++ 找出从装有三种类型a、B、C的球的袋子中取出的球的最小数量,使n个球的类型相同

C++ 找出从装有三种类型a、B、C的球的袋子中取出的球的最小数量,使n个球的类型相同,c++,algorithm,combinatorics,C++,Algorithm,Combinatorics,例如,假设一个袋子里有1个A型球、2个B型球和3个C型球。 然后,为了确保至少有2个球属于同一类型,我们必须从袋子中取出的球的最小数量为“4”(第一个和第四个球可以是B型或C型) 我们如何才能找到相同的球,使至少n个球的类型相同。tldr-(2*N-2*N*M-3*M+M*M)/2 如果你有 A, 2B, 3C... 你可以这样画: 1 C B A 2 C B 3 C 两人的最低人数为1级+1级 1 D C B A 2 D C B 3 D C 4 D 现

例如,假设一个袋子里有1个A型球、2个B型球和3个C型球。 然后,为了确保至少有2个球属于同一类型,我们必须从袋子中取出的球的最小数量为“4”(第一个和第四个球可以是B型或C型)


我们如何才能找到相同的球,使至少
n
个球的类型相同。

tldr
-(2*N-2*N*M-3*M+M*M)/2


如果你有

A, 2B, 3C...
你可以这样画:

1    C B A
2    C B
3    C
两人的最低人数为1级+1级

1   D C B A
2   D C B
3   D C
4   D
现在两个球的最小值是4+1=5,第三级是3+4+1=8

要达到具有N个字母的lvl M,循环为:

for (B=1,n=0; n<M-1; n++)
    B+=N-n;

为了解决这个问题,一个简单的方法将起作用。只需将数量小于n的所有球相加(即相同类型球的最小数量)。然后将所有剩余的球相加(n-1)。您的答案将是总和+1。


考虑一个例子,假设你有10个A型球,15个B型球,20个C型球,你希望至少有16个相同颜色的球。该方法表示将计数小于n的所有球相加,即16。。因此,总和为10+15=25。现在为所有剩余类型的球添加(n-1),即仅添加类型C。因此,总和=40。因此,您至少需要绘制16个球的最小球数为sum+1=41

你的语法不正确
例如
是拉丁语gratia的缩写,意思是
,例如
。你实际上是在说
,例如
@TimBiegeleisen,或者这可能是一个拼写错误的egg,这是你解决这个难题得到的奖品。要回答唯一的问题,请问:代码最终会发挥作用。所以我试着用蛮力强迫,每种类型减去一个球,直到n变成1,但它不起作用。我投票结束这个问题,因为它与编程无关。
-(2*N-2*N*M-3*M+M*M)/2