“事实上饭量越小的人讲对的话越多。”
从这句话就可以推出答案:
因为每个人总共说了2句话,"最多"那就是说对了2句。
那很容易就可以看出只有B说的全是真话。
那么你要的答案也就出来了。
饭量:A>C>B
#include
bool isRight(int a,int b,int c)
{
int x=0,y=0,z=0;
if(b>a)
x++;
if(c==a)
x++;
if(a>b)
y++;
if(a>c)
y++;
if(c>b)
z++;
if(b>a)
z++;
if((a>b)!=(x
if((b>c)!=(y
if((c>a)!=(z
return true;
}
int main()
{
if(isRight(1,2,3))
printf("C>B>A\n");
if(isRight(1,3,2))
printf("B>C>A\n");
if(isRight(2,1,3))
printf("C>A>B\n");
if(isRight(2,3,1))
printf("B>A>C\n");
if(isRight(3,1,2))
printf("A>C>B\n");
if(isRight(3,2,1))
printf("A>B>C\n");
return 0;
}
运行结果为A>C>B
A说:B比我吃的多
B说:A比我吃的多
那么他们当中一定有一人是说的假话.
如果是B说的是真的那么C说的是假话.->只有B是说的真话
如果A说的是真话那么C也不成立 ->只有A说真话
所以说 他们之间只有一个人说的是真话.
是哪一个?
谁知道 3个人说的都是矛盾的
你随便写一个就是
#include
int fA(int A, int B, int C)
{
int res = 0;
if(B>A) ++res;
if(C==A) ++res;
return res;
}
int fB(int A, int B, int C)
{
int res = 0;
if(A>B) ++res;
if(A>C) ++res;
return res;
}
int fC(int A, int B, int C)
{
int res = 0;
if(C>B) ++res;
if(B>A) ++res;
return res;
}
bool check(int A, int B, int C)
{
if((A >= B) != (fA(A,B,C)<=fB(A,B,C))) return false;
if((A >= C) != (fA(A,B,C)<=fC(A,B,C))) return false;
if((B >= C) != (fB(A,B,C)<=fC(A,B,C))) return false;
return true;
}
int main()
{
for(int A=1; A<4; ++A)
for(int B=1; B<4; ++B)
for(int C=1; C<4; ++C)
if(check(A, B, C))
{
printf("A=%d, B=%d, C=%d\n", A, B, C);
printf("fA=%d, fB=%d, fC=%d\n", fA(A,B,C),fB(A,B,C), fC(A,B,C));
for(int i=3; i>0; --i)
{
if(A == i) printf("A>");
if(B == i) printf("B>");
if(C == i) printf("C>");
}
printf("\n");
return 0;
}
return 0;
}