一道排列组合题
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,我们就能保证每类药品至少有一颗。
相关文章推荐
- jQuery学习笔记(五六)——高级事件
- 使用VIM插件ctags来阅读C代码
- 七周七种前端框架三: Angular2 印象
- 腾讯云CentOS7.0使用yum安装mysql及使用遇到的问题
- mysql 批量导入脚本
- 子查询
- 安装MySQL-python-1.2.3c1出现“error: command 'gcc' failed with exit status 1”错误
- cygwin国内安装源
- RF Test and Measurement-2
- QPixmap的深拷贝和浅拷贝
- 多表连接查询
- C++学习笔记25——泛型算法之写入容器
- S3C2440 SDRAM寄存器初始化设置
- 华为oj输入一行字符,分别统计出包含英文字母、空格、数字和其他字符的个数
- QImage对一般图像的处理
- QPixmap vs. QImage
- Application中的路径
- 苏州OJ c001: 合并同类项
- 迷迷糊糊的把CentOS7在新机器上安装成功了
- Java8のStream学习