c语言题目枚举法做题 有4名专家对4款赛车进行评论. A说:2号赛车是最好的. B说:4号赛车是最好的. C说:3号不是最佳赛车. D说:B说错了. 事实上只有1款赛车最佳,且只有一名专家说对了,其他3人都说错了.请编程输出 最佳车的车号,以及哪位专家说对了.
时间: 2024-10-11 17:13:50 浏览: 95
为了使用枚举法解决这个问题,我们可以创建一个枚举结构表示每位专家的观点,并设定一个变量记录最佳赛车的号码和正确的专家。首先,我们需要创建一个枚举类型表示四种可能的情况:
```c
enum ExpertOpinion {
EXPERT_A, // A认为2号最好
EXPERT_B, // B认为4号最好
EXPERT_C, // C认为3号不是最好的
EXPERT_D, // D认为B错误
};
```
然后,我们定义四个变量分别代表四位专家的观点,初始值都设为对应专家认为最好的赛车号:
```c
ExpertOpinion expertOpinions[] = {EXPERT_A, EXPERT_B, EXPERT_C, EXPERT_D};
int bestCarNumber = 0;
ExpertOpinion correctExpert = EXPERT_NONE; // 初始化为无专家
```
接下来,我们需要遍历专家的观点,检查他们的说法是否一致。如果只有一个专家的观点是正确的,那么这个观点就是答案。同时更新`bestCarNumber`和`correctExpert`。
```c
for (int i = 0; i < 4; i++) {
if (expertOpinions[i] == EXPERT_D) {
// 如果D说B错,则排除B的观点
expertOpinions[EXPERT_B] = EXPERT_NONE;
}
if (!bestCarNumber && expertOpinions[i] != EXPERT_NONE) {
// 如果当前专家没有否定过别的车,且他有自己的推荐,就更新bestCarNumber和correctExpert
bestCarNumber = expertOpinions[i].value - EXPERT_A.value + 1;
correctExpert = expertOpinions[i];
} else if (bestCarNumber && expertOpinions[i] != EXPERT_NONE && expertOpinions[i] != correctExpert) {
// 如果已有最佳车,而当前专家与之前不符,说明之前的判断是错误的
bestCarNumber = 0;
correctExpert = EXPERT_NONE;
}
}
```
最后,打印出结果:
```c
printf("最佳车的车号: %d\n", bestCarNumber);
if (correctExpert == EXPERT_NONE) {
printf("没有人说对了。\n");
} else {
printf("说对的是专家:%s\n", correctExpert == EXPERT_A ? "A" : correctExpert == EXPERT_B ? "B" : correctExpert == EXPERT_C ? "C" : "D");
}
```
阅读全文