您的位置:首页 > 其它

一道排列组合题

2015-11-21 15:16 309 查看

题目:

现假设要将颗粒状的药品调剂成一种新药。药品有A,B,C三种。新药调剂规则如下。

从A,B,C这3种药品中,共取100粒进行调剂。

调剂时,A,B,C这3种药品每种至少有一粒。

不考虑药品调剂的顺序。

同种药品每粒都相同。

这种情况下,新药调剂的组合共有多少种呢?

Solution 1:

共有100粒药,我们假设A
=>
x,B
=>
y,C
=>
z,则有x+y+z
=
100。

调剂时,A,B,C每种至少有一粒,则有 1
<=
x
<=
98, 1
<=
y
<=
98, 1
<=
z
<=
98。

不用考虑药品的顺序
&&
同种药品都是相同的。可以得出这是个分个数问题。

代码实现:

int x , y , z , count = 0;
for (x = 1; x <= 98; x++){
for (y = 1; y <= 98; y++){
for (z = 1; z <= 98; z++){
if (x + y + z == 100){
cout << "x: " << x << " " << "y: " << y << " " << "z: " << z << " " << endl;
count++;
}
}
}
}
cout << count;


Solution 2:

由于有A,B,C三种药,并且每一种药都至少有一粒。则我们可以规定有两块木板,分别为
L1
,
L2
,同时规定
L1
左边必定是A,右边必定是B;
L2
左边必定是B,右边必定是C。

这样问题就转换为成,如果在99个空位里面填上两块木板。即方法有C(99,2)种。

为什么可以如此转换?

因为我们总有100粒药品,且每种药品的个数是可以活动的。所以,我们只需要保证有
L1
,
L2
,我们就能保证每类药品至少有一颗。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: