求一道C程序设计题的做法?请高手帮忙
A说:B比我吃得多,C和我吃得一样多;
B说:A比我吃得多,A也比C吃得多;
C说:我比B吃得多,B比A吃得多;
事实上饭量越小的人讲对的话越多。请设计程序输出饭量最大者和最小者。假设3人饭量各不相同。
练习目的:穷举法解题;循环结构的嵌套
要求:用for循环结构解题
程序运行效果要求如下:
饭量最大的是:X
饭量最小的是:Y
请按任意键继续 . . .
说明:X和Y是A、B、C中的一个。 展开
为了简化起见,我的第一串代码的输出格式是输出了A、B、C的饭量。望见谅!
x、y、z分别表示A、B、C的饭量
A说:x<y,x=z
B说:x>y,x>z
C说:y<z,x<y
这道题的意思就是,三个人每个人都给出了两个命题。饭量大的给的命题错误多,又由于饭量不相等,所以,对应的给出的命题的正确个数也不相同。他们三个中有一个人给出了两个错误的命题,还有一个人给出了一个错误的和一个正确的,剩余的一个给出了两个错误的命题。显然,由于饭量不能相等,所以A说的“x=z”显然是错的。也就是说,A说的两个命题至少有一个错的。如果用x、y、z分别表示A、B、C的饭量的话,A的饭量可能是1或者2(0表示饭量最小,1表示饭量适中,2表示饭量最大),B、C的饭量则不能立即确定。
★代码一及注释▲
#include<stdio.h>
void main()
{
int x,y,z;/*x、y、z分别表示A、B、C可能的饭量*/
int a,b,c;/*a、b、c分别表示经过判断后得出的A、B、C实际的饭量*/
for(x=1;x<=2;x++)/*穷举x、y、z的所有可能取值情况*/
for(y=0;y<=2;y++)
for(z=0;z<=2;z++)
if(x!=y&&x!=z&&y!=z)/*三个人的饭量不相等,这个if语句排除饭量相等的情况*/
{
a=b=c=2;/*初始化为2,下面如果某个人的命题是正确的,其饭量将减去1*/
if(x<y)
{
a--;
c--;
}
else
b--;
if(x>z)
b--;
if(y<z)
c--;
if(a!=b&&b!=c&&c!=a)
printf("A、B、C的饭量分别为:%d、%d、%d。\n",a,b,c);/*得出实际饭量,实际饭量不相等*/
}
}
执行结果:A、B、C的饭量分别为:2、0、1。
★代码二●
#include<stdio.h>
void main()
{
int x,y,z;/*x、y、z分别表示A、B、C可能的饭量*/
int a,b,c;/*a、b、c分别表示经过判断后得出的A、B、C实际的饭量*/
for(x=1;x<=2;x++)/*穷举x、y、z的所有可能取值情况*/
for(y=0;y<=2;y++)
for(z=0;z<=2;z++)
if(x!=y&&x!=z&&y!=z)/*三个人的饭量不相等,这个if语句排除饭量相等的情况*/
{
a=b=c=2;/*初始化为2,下面如果某个人的命题是正确的,其饭量将减去1*/
if(x<y)
{
a--;
c--;
}
else
b--;
if(x>z)
b--;
if(y<z)
c--;
if(a!=b&&b!=c&&c!=a)
{
if(a==2)
{
printf("饭量最大的是:A\n");
if(b==0)
printf("饭量最小的是:B\n");
else
printf("饭量最小的是:C\n");
}
else if(b==2)
{
printf("饭量最大的是:B\n");
if(a==0)
printf("饭量最小的是:A\n");
else
printf("饭量最小的是:C\n");
}
else
{
printf("饭量最大的是:C\n");
if(a==0)
printf("饭量最小的是:A\n");
else
printf("饭量最小的是:B\n");
}
}
}
}
为了简化起见,我的第一串代码的输出格式是输出了A、B、C的饭量。望见谅!
x、y、z分别表示A、B、C的饭量
A说:x<y,x=z
B说:x>y,x>z
C说:y<z,x<y
这道题的意思就是,三个人每个人都给出了两个命题。饭量大的给的命题错误多,又由于饭量不相等,所以,对应的给出的命题的正确个数也不相同。他们三个中有一个人给出了两个错误的命题,还有一个人给出了一个错误的和一个正确的,剩余的一个给出了两个错误的命题。显然,由于饭量不能相等,所以A说的“x=z”显然是错的。也就是说,A说的两个命题至少有一个错的。如果用x、y、z分别表示A、B、C的饭量的话,A的饭量可能是1或者2(0表示饭量最小,1表示饭量适中,2表示饭量最大),B、C的饭量则不能立即确定。
★代码一及注释▲
#include<stdio.h>
void main()
{
int x,y,z;/*x、y、z分别表示A、B、C可能的饭量*/
int a,b,c;/*a、b、c分别表示经过判断后得出的A、B、C实际的饭量*/
for(x=1;x<=2;x++)/*穷举x、y、z的所有可能取值情况*/
for(y=0;y<=2;y++)
for(z=0;z<=2;z++)
if(x!=y&&x!=z&&y!=z)/*三个人的饭量不相等,这个if语句排除饭量相等的情况*/
{
a=b=c=2;/*初始化为2,下面如果某个人的命题是正确的,其饭量将减去1*/
if(x<y)
{
a--;
c--;
}
else
b--;
if(x>z)
b--;
if(y<z)
c--;
if(a!=b&&b!=c&&c!=a)
printf("A、B、C的饭量分别为:%d、%d、%d。\n",a,b,c);/*得出实际饭量,实际饭量不相等*/
}
}
执行结果:A、B、C的饭量分别为:2、0、1。
★代码二●
#include<stdio.h>
void main()
{
int x,y,z;/*x、y、z分别表示A、B、C可能的饭量*/
int a,b,c;/*a、b、c分别表示经过判断后得出的A、B、C实际的饭量*/
for(x=1;x<=2;x++)/*穷举x、y、z的所有可能取值情况*/
for(y=0;y<=2;y++)
for(z=0;z<=2;z++)
if(x!=y&&x!=z&&y!=z)/*三个人的饭量不相等,这个if语句排除饭量相等的情况*/
{
a=b=c=2;/*初始化为2,下面如果某个人的命题是正确的,其饭量将减去1*/
if(x<y)
{
a--;
c--;
}
else
b--;
if(x>z)
b--;
if(y<z)
c--;
if(a!=b&&b!=c&&c!=a)
{
if(a==2)
{
printf("饭量最大的是:A\n");
if(b==0)
printf("饭量最小的是:B\n");
else
printf("饭量最小的是:C\n");
}
else if(b==2)
{
printf("饭量最大的是:B\n");
if(a==0)
printf("饭量最小的是:A\n");
else
printf("饭量最小的是:C\n");
}
else
{
printf("饭量最大的是:C\n");
if(a==0)
printf("饭量最小的是:A\n");
else
printf("饭量最小的是:B\n");
}
}
}
}