1.2 最佳赛车问题
题目描述
四名专家对四款赛车进行评论。
专家A说:2号赛车是最好的。
专家B说:4号赛车是最好的。
专家C说:3号不是最佳赛车。
专家D说:专家B说错了。
事实上只有一款赛车最佳,且只有一名专家说对了,其他三人都说错了。请编程输出最佳车的编号,以及哪位专家所对了。
分析
题目要求
请编程输出最佳车的编号,以及哪位专家所对了。
从题目要求中大致可以确定,在实现中需要一个变量记录说对了的专家编号,一个变量记录最佳赛车编号。
已知条件
事实上只有一款赛车最佳,且只有一名专家说对了,其他三人都说错了。
用4个变量分别记录四个专家说的是否正确,将四个变量的和是否等于1作为判断条件之一。
设计思路
- 使用一个变量theBestCar,表示最佳赛车号,取值1,2,3,4使用循环依次讨论分别。
- 用四个变量wordA,wordB,wordC,wordD表示四名专家说的是否正确,1为正确,0为错误。
- 判断
- 如果存在wordA ,wordB ,word C,wordD的和为1,且满足 最佳赛车数量为1的情况,则输出结果。
- 否则无解
转化为C语言
专家A说:2号赛车是最好的。
专家B说:4号赛车是最好的。
专家C说:3号不是最佳赛车。
专家D说:专家B说错了。
wordA = (2 == theBestCar);
wordB = (4 == theBestCar);
wordC = (3 != theBestCar);
wordD = !wordB;
代码实现
程序
#include <stdio.h> #include<stdlib.h>int main() {/*** theBestCar 最佳赛车编号* wordA A是否说对* wordB B是否说对* wordC C是否说对* wordD D是否说对* sum 四人说对的个数和* flagCar 最佳赛车标记,初始值为0* count 最佳赛车数量,初始值为0*/int theBestCar;int wordA,wordB,wordC,wordD;int sum;int flagCar = 0,count = 0;/********************************************************* 依次列出最佳赛车的可能,对四人说的话进行判断********************************************************/for (int iTemp = 1; iTemp <= 4 ; iTemp++) {theBestCar = iTemp;wordA = (theBestCar == 2);wordB = (theBestCar == 4);wordC = (theBestCar != 3);wordD = !wordB;sum = wordA + wordB + wordC + wordD;/************************************************************ 判断,只有一个人说对了* 记录最佳赛车编号* 最佳赛车数量count++* ********************************************************/if (sum == 1) {count++ ;flagCar = iTemp;}}/************************************************************ 判断* 有且只有一辆最佳赛车?* 是--》输出结果* 否--》无解* ********************************************************/if (count == 1) {theBestCar = flagCar;wordA = (theBestCar == 2);wordB = (theBestCar == 4);wordC = (theBestCar != 3);wordD = (theBestCar != 4);if (wordA) {printf("A 专家说的对\n");} else if (wordB) {printf("B 专家说的对\n");} else if (wordD) {printf("C 专家说的对\n");} else {printf("D 专家说的对\n");}printf("%d 号赛车是最好的\n",flagCar);}else {printf("无解\n");}system("pause");return 0; }
运行结果