例7.7:在口袋中有红,黄,蓝,白黑5种颜色的球若干,每次从口袋中取出3个球,问得到3种不同颜色的球的可能取法,打印出每种组合的3种颜色

本文通过枚举方法,展示了五种颜色小球的无序和有序排列组合过程,使用C++实现,详细解释了如何避免重复组合,适用于初学者理解和实践基本的组合数学原理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

//五种颜色的小球,枚举:(无序排列组合)
#include
#include
using namespace std;
enum color {red,yellow,blue,white,black}; //声明枚举类型

int main()
{
color pri;
int i, j, k, loop;
int n = 0; //n计数
for (i = red; i <= black; i++)
for (j = red; j <= black; j++)
for (k = red; k <= black; k++)
if ( i != j && i != k && j != k )
{
cout << setw(3) << ++n<<" " ;
for (loop = 1; loop <= 3; loop++)
{
switch (loop)
{
case 1:pri = color(i); break;
case 2:pri = color(j); break;
case 3:pri = color(k); break;
default:break;
}

					switch (pri)
					{
					case red:    cout << setw(8) << "red"<<"  ";      break;
					case yellow: cout << setw(8) << "yellow" << "  "; break;
					case blue:   cout << setw(8) << "blue" << "  ";   break;
					case white:  cout << setw(8) << "white" << "  ";  break;
					case black:  cout << setw(8) << "black" << "  ";  break;
					default: break;
					}
				}
				cout << endl;
			}	
		
cout << endl<<"total:"<<n<<endl;
return 0;

}

//五种颜色的小球,枚举:(有序排列)
#include
#include
using namespace std;

enum color { red, yellow, blue, white, black }; //声明枚举类型

int main()
{
color pri;
int i, j, k, loop;
int n = 0; //n计数
for (i = red; i <= blue; i++)
for (j = i+1; j <= white; j++)
for (k = j+1; k <= black; k++)
{
cout << setw(3) << ++n << " ";
for (loop = 1; loop <= 3; loop++)
{
switch (loop)
{
case 1:pri = color(i); break; //pri是color类型,i是int 类型,必须要强制转换类型!!!
case 2:pri = color(j); break;
case 3:pri = color(k); break;
default:break;
}

					switch (pri)
					{
					case red:    cout << setw(8) << "red" << "  ";      break;
					case yellow: cout << setw(8) << "yellow" << "  "; break;
					case blue:   cout << setw(8) << "blue" << "  ";   break;
					case white:  cout << setw(8) << "white" << "  ";  break;
					case black:  cout << setw(8) << "black" << "  ";  break;
					default: break;
					}
				}
				cout << endl;
			}

cout << endl << "total:" << n << endl;
return 0;

}

三色题是一个经典的组合题,考虑从不同颜色中选取不同组合情况。既然你要的是所有的颜色搭配,这里有三种颜色: 1. 全部是色:有 C(3,8) 种选择,其中 C(n,k) 表示从 n 个不同元素中取 k 个元素的组合数,计算公式是 `n! / (k!(n-k)!)`。 2. 全部是色:同理,也有 C(3,8) 种。 3. 全部是色:同样,有 C(6,8) 种。 4. 组合:先选33,然后从剩下的9个(63)中选5个,有 C(3,3) * C(6,5) 种。 5. 组合:同理,先选3,再选6个,有 C(3,3) * C(6,6) 种(由于6个必选,所以只需选3)。 6. 白黑组合:类似地,先选3,再选5,有 C(3,3) * C(6,5) 种。 至于Java代码来生成这些组合,可以使用递归或者循环遍历,但这需要生成大量的组合数据并存储,实际操作上可能不太适合直接打印来。如果你想要程序统计总数,可以编写递归函数来计算组合数,然后相加得到总的搭配种类。这里我简化说明一下思路: ```java import java.util.ArrayList; public class ColorCombination { // 计算组合数的辅助方法 static int combinations(int n, int r) { if (r == 0 || r == n) return 1; else return combinations(n - 1, r - 1) + combinations(n - 1, r); } public static void main(String[] args) { int red = 3, white = 3, black = 6; int totalCombinations = combinations(red, 0) + combinations(white, 0) + combinations(black, 0) + combinations(red, 3) * combinations(white, 3) * combinations(black, 5) + combinations(red, 3) * combinations(black, 6) + combinations(white, 3) * combinations(black, 5); System.out.println("总的不同颜色搭配组合: " + totalCombinations); } } ``` 请注意,这个子假设了每次都会取到对应颜色的全部,实际上随机抽取可能不会恰好都是3个或6个。如果需要模拟随机抽取,那将涉及到概率和随机数生成,而不是简单的组合数学计算。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值