目录😋
任务描述
本关任务:本关任务:口袋中有红、黄、蓝、白、黑 5 种颜色的球若干个。每次从口袋中先后取出 3 个球,问得到 3 种不同颜色的球的可能取法,输出每种排列的情况。
相关知识
为了完成本关任务,你需要掌握:
- 枚举类型定义
- 通过循环语句列举可能的排列
- 枚举类型定义
在程序设计过程中,如果一个变量仅在很小的范围内取值,则可以把它定义为枚举类型。使用枚举类型的变量能够提高程序的可读性。
所谓“枚举”就是把所有可能的取值情况列举出来。例如,真和假表示了逻辑值的两种情况,男和女是性别的两种取值情况,选修课成绩有“优”“良”“中”“及格”“不及格”5种取值情况。
定义枚举类型的一般格式为:
enum 枚举类型名{标识符1,标识符2,……,标识符n};
例如:
enum bool{ false , true } ;
枚举变量的定义有3种形式(与结构体类似):
1.先定义枚举类型,再定义枚举变量
enum color { red , green , blue , yellow , white } ; enum color select , change ;
2.定义枚举类型的同时定义枚举变量
enum color { red , green , blue , yellow , white } select , change ;
3.不指定枚举类型名,直接定义枚举变量
enum { red , green , blue , yellow , white } select , change ;
(变量select是枚举类型enum color,它的值只能是red , green , blue , yellow , white)
- 通过循环语句列举可能的排列
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; printf("%-4d",n); for(loop=1;loop<=3;loop++) { switch(loop) { case 1:pri=i;break; case 2:pri=j;break; case 3:pri=k;break; } switch(pri) { case red:printf("%-10s","red");break; case yellow:printf("%-10s","yellow");break; case blue:printf("%-10s","blue");break; case white:printf("%-10s","white");break; case black:printf("%-10s","black");break; } } printf("\n"); } }
编程要求
根据提示,在右侧编辑器代码文件中的 Begin-End 区间内补充代码,输出每种排列的情况。
测试说明
平台会对你编写的代码进行测试:
预期输出:
`Output:
1 red yellow blue
2 red yellow white
3 red yellow black
4 red blue yellow
5 red blue white
6 red blue black
7 red white yellow
8 red white blue
9 red white black
10 red black yellow
11 red black blue
12 red black white
13 yellow red blue
14 yellow red white
15 yellow red black
16 yellow blue red
17 yellow blue white
18 yellow blue black
19 yellow white red
20 yellow white blue
21 yellow white black
22 yellow black red
23 yellow black blue
24 yellow black white
25 blue red yellow
26 blue red white
27 blue red black
28 blue yellow red
29 blue yellow white
30 blue yellow black
31 blue white red
32 blue white yellow
33 blue white black
34 blue black red
35 blue black yellow
36 blue black white
37 white red yellow
38 white red blue
39 white red black
40 white yellow red
41 white yellow blue
42 white yellow black
43 white blue red
44 white blue yellow
45 white blue black
46 white black red
47 white black yellow
48 white black blue
49 black red yellow
50 black red blue
51 black red white
52 black yellow red
53 black yellow blue
54 black yellow white
55 black blue red
56 black blue yellow
57 black blue white
58 black white red
59 black white yellow
60 black white blue
total: 60`
开始你的任务吧,祝你成功!
我的通关代码:
int main() { enum Color{red,yellow,blue,white,black}; enum Color i,j,k,pri; int n,loop; n=0; printf("Output:\n"); // 请在这里补充代码 /********** Begin *********/ 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++; printf("%-4d",n); for(loop = 1;loop <=3;loop++){ switch (loop){ case 1:pri = i;break; case 2:pri = j; break; case 3:pri = k; break; } switch(pri){ case red:printf("%-10s","red");break; case yellow:printf("%-10s","yellow");break; case blue:printf("%-10s","blue");break; case white:printf("%-10s","white");break; case black:printf("%-10s","black");break; } } printf("\n"); } } } } } /********** End **********/ printf("\ntotal:%5d\n",n); return 0; }
测试结果: