简单C++语言问题,口袋中有红,黄,黑,白,蓝,五色球若干,每次从口袋里面取3个不同颜色球,问有多少

[复制链接]
查看11 | 回复1 | 2011-1-27 15:06:23 | 显示全部楼层 |阅读模式
口袋中有红,黄,黑,白,蓝,五色球若干,每次从口袋里面取3个不同颜色球,问有多少种?用枚举类型做?用数学一算答案是10,但是编的怎么是60,错在哪?
#include
void main()
{ enum color{red,yellow,blue,white,black};//枚举类型的定义
enum color prj;
int n=0,loop,i,j,k;
for(i=red;i<=black;i++)
for(j=red;j<=black;j++)
if(j!=i)
{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:prj=(enum color)i;break;

case 2:prj=(enum color)j;break;

case 3:prj=(enum color)k;break;

default:break;

}

switch(prj)

{case red:
cout<<" red";

case yellow: cout<<" yellow";

case blue: cout<<" blue";

case white:cout<<" white";

case black:cout<<" black";

default:break;

}

}
cout<<endl;

}
}
cout<<"total:"<<n<<endl;
}

回复

使用道具 举报

千问 | 2011-1-27 15:06:23 | 显示全部楼层
这是排列组合的问题。所谓排列,就是指从给定个数的元素中取出指定个数的元素进行排序。组合则是指从给定个数的元素中仅仅取出指定个数的元素,不考虑排序。取3个不同颜色球,如果要求顺序1红2黄3黑1黄2红3黑算2种,那么以此类推总和就有60种而你的没有要求顺序,算1种,那么以此类推总和就有10种而你的程序之所以是60种,就是要求了顺序比如i=红,j=黄,k=黑 ,你的代码成立比如i=黄,j=红,k=黑 ,你的代码也成立修改方法应该是: for(i=red;i<=black;i++)for(j=i+1;j<=black;j++)//i出现过的颜色就不在出现了 {for(k=j+1;k<=
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行