新浪博客

利用C++中的枚举解决排列组合问题

2012-09-24 22:36阅读:
问题:口袋中有红、黄、蓝、白、黑五种颜色的球若干个。每次从口袋中取出3个
不同颜色的球,问有多少种取法?并要求列举出每种取法取到的具体颜色种类。


分析:口袋中共有五个球,相当于变量只有五个取值,最容易让我们想到用枚举来解决这道题目,每次取三个,且颜色不同,很明显是我们高中数学中的排列组合问题,题目要求求出取法的总和,很明显要用到循环来计算,列举当然就用cout输出了,下面给出我的代码。

代码:
#include <iostream.h>
void main()
{
enum color{red,yellow,blue,white,black};
//枚举球的五个颜色
enum color pri;
int n,loop,i,j,k;
n=0;
for(i=red;i<=black;i++)
for(j=red;j<=black;j++)
if(i!=j) //前两个球的颜色不同
{
for(k=red;k<=black;k++)
if((k!=i)&&(k!=j)) //三个球的颜色都不同
{
n=n+1; //累加计数
cout.width(4);
cout<<n;
for(loop=1;loop<=3;loop++)
{
switch(loop)
{
case 1:pri=(enum color)i;
break;
case 2:pri=(enum color)j;
break;
case 3:pri=(enum color)k;
break;
default: break;
}
switch(pri)
{
case red:cout<<' red';
break;
case yellow:cout<<' yellow';
break;
case blue:cout<<' blue';
break;
case white:cout<<' white';
break;
case black:cout<<' black';
break;
default: break;
}
}
cout<<endl;
}
}
cout<<'total:'<<n<<endl;
}

运行结果:

利用C++中的枚举解决排列组合问题 - 姜海强 - 姜海强 廊坊师范学院

利用排列组合可以解决生活中的很多问题,比如,我们可以用排列组合列举一件事情的可能发生发展的情况,在列举完后,我们从中选择一个最适合自己的发展,从而做到心中有数。学好排列组合就学会了怎么生活,可是学好排列组合之前应该学好C++,因为当遇到一件事时你不可能一辈子像高中生那样用笔去列举所有的可能,太麻烦了,如果你聪明的应用C++,就能起到事半功倍的效果,何乐而不为呢?


我的更多文章

下载客户端阅读体验更佳

APP专享