C语言:三色球问题:12个中3红3白6黑,取8个求共有多少种可能
问题:
在一个口袋里放有12个球,已知其中3个红球,3个白球,6个黑球,现从中任取8个,问共有多少种可能的颜色搭配?
分析:
根据问题描述可设任取的8个球中红球为m个,白球为n个,则黑球为8-m-n个。已知12个球中有3个红球,3个白球,6个黑球,因此,m的取值范围为[0, 3],n的取值范围因此为[0, 3],黑球的个数小于等于6,即 8 - m - n ≤ 6。
推理:
循环结构检测 m、n 范围内的所有可能取值,再代入 8-m-n 中进行验证,能够满足条件 8 - m - n ≤ 6 的那些 m、n 和 8-m-n 的组合即为问题的解。
程序流程图:
下面是完整的代码:
- #include<stdio.h>
- int main()
- {
- int m, n, number=0;
- printf(" 红球 白球 黑球\n");
- printf("......................\n");
- for( m=0; m<=3; m++ )
- for( n=0; n<=3; n++ )
- if(8-m-n<=6)
- printf(" %2d: %d %d %d\n", ++number, m, n, 8-m-n);
- return 0;
- }
运行结果:
红球 白球 黑球
......................
1: 0 2 6
2: 0 3 5
3: 1 1 6
4: 1 2 5
5: 1 3 4
6: 2 0 6
7: 2 1 5
8: 2 2 4
9: 2 3 3
10: 3 0 5
11: 3 1 4
12: 3 2 3
13: 3 3 2