首页 > 用户发贴区 > 编程问题提问区 > 求助高手c语言答案!
2009
01-06

预测比赛名次?
五位跳水高手将参加十米高台跳水决赛,有好事者让五格据实力预测比赛结果。
 A选手说:B第二,我第三;
 B选手说:我第二,E第四;
 C选手说:我第一,D第二;
 D选手说:C第后,我第三;
 E选手说:我第四,A第一;
决赛成绩公布以后,每位选手的预测都只说对了一半,即一对一错,请编写程序接触比赛的实际名次。


求助高手c语言答案!》有 3 条评论

  1. 尹恒科技 说:

    #include “stdio.h”

    #define A_S (b==2)^(a==3)
    #define B_S (b==2)^(e==4)
    #define C_S (c==1)^(d==2)
    #define D_S (c==5)^(d==3)
    #define E_S (e==4)^(a==1)
    //A_S means A says

    void main()
    {
     int a,b,c,d,e;
     for(a=1;a<=5;a++)
      for(b=1;b<=5;b++)
       for(c=1;c<=5;c++)
        for(d=1;d<=5;d++)
         for(e=1;e<=5;e++)
          if(a*b*c*d*e==120)
           if(A_S && B_S && C_S && D_S && E_S)
            goto loop;
    loop:printf(“A ranks %d\nB ranks %d\nC ranks %d\nD ranks %d\nE ranks %d\n”,a,b,c,d,e);
    }

    其实我只是个菜鸟,希望大家批评指正。

  2. 专吃棒棒糖 说:

    我不懂,能不能带注释给我讲讲,谢谢了!。。。

  3. 尹恒科技 说:

    看5个宏定义:

    ^(异或)运算符的作用是两个表达式都为0或都为1则结果为0,一个为1一个为0则为1。题目要求是只有一句是对的,也就是 表达1^表达2=1

    下面就是main函数了:

    5个for的嵌套相信你能理解,关键是怎么判断5个数不相等。我认为,只要这5个数的最小公倍数和他们的乘积相等,我们就可以认为:

        只要他们他们的成绩等于120,也就是说它们的乘积等于5!,a到e这5个变量就分别取了1到5这5个数,没有重复,你自己感觉一下。

    在5个变量取了不同的数的前提下,只要满足这5个人都说对了一半,也就行了吧。所谓都说对了一半,不就是

    if(A_S==1 && B_S==1 && C_S==1 && D_S==1 && E_S==1)嘛

    不也就可以缩写成

    if(A_S && B_S && C_S && D_S && E_S)嘛

    我说的清楚吗?

留下一个回复