问题描述
3个人比较饭量的大小,每人说了两句话。
A说:B比我吃得多,C和我一样多;
B说:A比我吃得多,A也比C吃得多;
C说:我比B吃得多,B比A吃得多;
事实上饭量越小的人讲对的话越多。请编程按饭量的大小输出3个人的顺序。
分析
题目要求
按饭量大小输出3个人的顺序。
从上面这句话可以知道,我们只需要按顺序输出三个人的顺序,不需要输出饭量,因此规定变量取值范围时只需要考虑大小关系,无关符号。
已知条件
已经确定是正确的
- A,B,C三人每人说了两句话
- 饭量越小的人说对的话越多
变量
- A说:B比我吃得多,C和我一样多;
- B说:A比我吃得多,A也比C吃得多;
- C说:我比B吃得多,B比A吃得多;
设计思路
根据已知条件,可以推出每个人说对的话的个数的值域为{0,1,2}。
又饭量越小的人说对的话越多,三个人的饭量分别取三人说对的话的相反数(因为只需要比较大小,无关正负),因此其值域为{-2,-1,0}。
- 当讲对两句话时,饭量取值-2
- 当讲对一句话时,饭量取值-1
- 当全部说错时,饭量取值0
枚举
判断(饭量越小的人讲对的话越多)
- 当存在每个人的饭量和讲对的话均都满足上面这个关系时,有解
- 否则,无解
转化为C语言
整型变量wordA,word B,wordC分别表示A,B,C三人说对的个数;整型变量a,b,c表示三人的饭量。已知条件中三人说对的个数和饭量大小关系可以转化成以下三个式子:
- wordA = (b > a) + (c == a);
- wordB = (a > b) + (a > c);
- wordC = (c > b) + (b > a);
判断条件可以转化为:
if (a == -wordA && b == -wordB && c == -wordC)
代码实现
代码
#include <stdio.h>