3个人比饭量大小,每人说了2句话: A说:B比我吃得多;C和我吃得一样多。 B说:A比我吃得多;A也比C吃得多

#include <iostream>
using namespace std;
int main(){
int A,B,C;
int a,b,c;
a=((B>A)+(C==A));
b=((A>B)+(A>C));
c=((C>B)+(B>A));
for(A=1;A<=3;A++)
for(B=1;B<4;B++)
for(C=1;C<4;C++)
if(((A>B&&a<b)||(A==B&&a==b)||(A<B&&a>b))
+((A>C&&a<c)||(A==C&&a==c)||(A<C&&a>c))
+((B<C&&b>c)||(B>C&&b<c)||(B==C&&b==c))==3)
cout<<"A的饭量是:"<<A<<a<<endl;
cout<<"B的饭量是:"<<B<<b<<endl;
cout<<"C的饭量是:"<<C<<c<<endl;
return 0;

}

为什么输出结果是:A的饭量是:30
B的饭量是:42
C的饭量是:41
这显然错了啊!可是我就是不明白为什么,请那位大牛帮忙看一下,这个有点浪费时间的,非常抱歉……
3个人比饭量大小,每人说了2句话:
A说:B比我吃得多;C和我吃得一样多。
B说:A比我吃得多;A也比C吃得多。
C说:我比B吃得多;B比A吃得多。
事实上饭量越小的人讲对的话越多,并且当饭量相等时,说对的话也相等。
请编程依次输出A、B、C的饭量大小
抱歉!刚才题目没写完整。

楼主,建议你将for循环前面对a,b,c赋值的三条语句拿到循环内部去再试试。

出现这种情况其实是前面那三个赋值语句写的有问题。如果你是在vc++6.0下用debug模式,则未初始化的变量会具有统一的初值0xcccccccc,这样A==B==C,所以a值就是1,而b,c都是0。(其他的编译系统我不太清楚,有可能是随机的一个值吧,那样你的问题对三人的表述就变质了)然后带入循环体,虽然A,B,C的值一直在变化,但是始终没再同步更新a,b,c的值,而在这个范围内问题是无解的。循环结束是因为ABC的值到达了边界,然后程序就把结束时的BC值输了出来。
从输出上看,你的系统是把ABC变成C<A<B了。我在程序中把abc人为赋成0,2,1,得到了和你一样的输出。嗯,你用的应该不是vc++6.0吧。所以要注意变量初始化的问题。
怀疑楼主的复合语句没学好,按照你这个写法,if只和后面的第一个分号之前结合,一起作为循环体的内容(此时循环体马上要判断条件并跳出),那么后两个cout就被排挤出循环体了。

贴上这个程序,不知道是否符合你的意思:
#include <iostream>
using namespace std;
int main(){
int A,B,C;
int a,b,c;
for(A=1;A<=3;A++)
for(B=1;B<4;B++)
for(C=1;C<4;C++){
a=((B>A)+(C==A));
b=((A>B)+(A>C));
c=((C>B)+(B>A));
if(((A>B&&a<b)||(A==B&&a==b)||(A<B&&a>b))
+((A>C&&a<c)||(A==C&&a==c)||(A<C&&a>c))
+((B<C&&b>c)||(B>C&&b<c)||(B==C&&b==c))==3){
cout<<"A的饭量是:"<<A<<a<<endl;
cout<<"B的饭量是:"<<B<<b<<endl;
cout<<"C的饭量是:"<<C<<c<<endl;
}
}
return 0;
}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2010-10-29
你这个题目不完整,后面C说的没有,或者有条件,他们每人只说对一半。
相似回答