求一道C程序设计题的做法?请高手帮忙

3个人比饭量大小,每人说了两句话:A说:B比我吃得多,C和我吃得一样多;B说:A比我吃得多,A也比C吃得多;C说:我比B吃得多,B比A吃得多;事实上饭量越小的人讲对的话越... 3个人比饭量大小,每人说了两句话:
A说:B比我吃得多,C和我吃得一样多;
B说:A比我吃得多,A也比C吃得多;
C说:我比B吃得多,B比A吃得多;
事实上饭量越小的人讲对的话越多。请设计程序输出饭量最大者和最小者。假设3人饭量各不相同。
练习目的:穷举法解题;循环结构的嵌套
要求:用for循环结构解题
程序运行效果要求如下:
饭量最大的是:X
饭量最小的是:Y
请按任意键继续 . . .
说明:X和Y是A、B、C中的一个。
展开
 我来答
古琪圣江雪
2019-06-16 · TA获得超过3722个赞
知道大有可为答主
回答量:3090
采纳率:28%
帮助的人:415万
展开全部

为了简化起见,我的第一串代码的输出格式是输出了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");
      }
     }
    }    
}

mayadong7349
推荐于2017-12-15 · TA获得超过2356个赞
知道大有可为答主
回答量:362
采纳率:0%
帮助的人:667万
展开全部

为了简化起见,我的第一串代码的输出格式是输出了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");

      }

     }

    }    

}

本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式