关闭

一道排列组合题

标签: 数学
271人阅读 评论(0) 收藏 举报
分类:

题目:


现假设要将颗粒状的药品调剂成一种新药。药品有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,我们就能保证每类药品至少有一颗。
0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:4708次
    • 积分:185
    • 等级:
    • 排名:千里之外
    • 原创:14篇
    • 转载:1篇
    • 译文:0篇
    • 评论:0条