谁跑的最快?

小狗、小兔、小猫、小猴和小鹿参加百米赛跑,比赛结束后,

  1. 小猴说:“我比小猫跑得快。”
  2. 小狗说:“小鹿在我的前面冲过了终点线。”
  3. 小兔说:“我的名次排在小猴的前面,小狗的后面。”

请根据他们的回答排出名次。

这个问题从文字上分析很容易得出结果。

由1,得到局部排序为:小猫 < 小猴

由2,得到局部排序为:小狗 < 小鹿

由3,得到局部排序为:小猴 < 小兔 <小狗

综上,等到总的排序为:小猫 < 小猴 <小兔 < 小狗 < 小鹿

如果要由程序解答,则可通过遍历各个小动物的名次,得到一个符合条件的解:

        int a, b, c, d, e = 0;// 对应为小狗, 小兔, 小猫, 小猴, 小鹿的名次
        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 ((d < c) && (e < a) && (b < d) && (b > a)) {
                                System.out.println("小狗: " + a);
                                System.out.println("小兔: " + b);
                                System.out.println("小猫: " + c);
                                System.out.println("小猴: " + d);
                                System.out.println("小鹿: " + e);
                            }
                        }
                    }
                }
            }
        }

详细的可运行代码在这里。以上代码最终输出:

小狗: 2
小兔: 3
小猫: 5
小猴: 4
小鹿: 1

这个结果可表示在下表中:

程序的几重循环,可看成对上表按行的组合运算的处理。