对于以下这两种问题是离散数学与概论在编程中的应用:
两个乒乓球队进行比赛,各队人。甲队为A,B,C 乙队为 X,Y,Z 抽签决定比赛名单。有人向队员打听比赛名单,A说他不和X比,C说他不和X,Z比,请编程序找出3组比赛名单
#include<stdio.h> void Game_list() { char i,j,k; /*i是a的对手;j是b的对手;k是c的对手*/ for (i='x';i<='z';i++) for (j='x';j<='z';j++) if (i!=j) for (k='x';k<='z';k++) if (i!=k && j!=k) if (i!='x' && k!='x' && k!='z') printf("A--%c\nB--%c\nC--%c\n",i,j,k); } int main() { Game_list(); return 0; }
口袋中有红、黄、蓝、白、黑5种颜色的球若干个。每次从口袋中任意取出3个球,问得到3种不同颜色的球的可能取法,输出每种排列的情况。
#include <iostream> #include <iomanip>//在输出时要用到setw控制符 using namespace std; int main( ) { enum color {red,yellow,blue,white,black};//声明枚举类型color color pri;//定义color类型的变量pri int i,j,k,n=0,loop;//n是累计不同颜色的组合数 for (i=red;i<=black;i++)//当i为某一颜色时 for (j=red;j<=black;j++)//当j为某一颜色时 if (i!=j)//若前两个球的颜色不同 { for (k=red;k<=black;k++)//只有前两个球的颜色不同,才需要检查第3个球的颜色 if ((k!=i) && (k!=j))//3个球的颜色都不同 { n=n+1;//使累计值n加1 cout<<setw(3)<<n;//输出当前的n值,字段宽度为3 for (loop=1;loop<=3;loop++)//先后对3个球作处理 { switch (loop)//loop的值先后为1,2,3 { case 1: pri=color(i);break ;//color(i)是强制类型转换,使pri的值为i case 2: pri=color(j);break ;//使pri的值为j case 3: pri=color(k);break ;//使pri的值为k default :break ; } switch (pri)//判断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<<"total:"<<n<<endl;//输出符合条件的组合的个数 return 0; }
时间: 2024-10-12 17:18:33