• 当前位置:首页>>C语言>>C语言编程实例>>跳水排名
  • 跳水排名
  •   问题描述:5位跳水高手参加10米高台跳水决赛,有好事者让5人据实力预测比赛结果.

             A选手说:B第二,我第三;

             B选手说:我第二,E第四;

             C选手说:我第一,D第二;

             D选手说:C最后,我第三;

             E选手说:我第四,A第一.

             决赛成绩公布之后,每位选手的预测都只说对了一半,即一对一错.请编程解出

             比赛的实际名次.

        解答:

           (1)解题的重要一步是要将人的想法表示成机器能够实现的表达式,数学公式或操作

              步骤.

           (2)用计算机解题很多时候涉及到逻辑运算.

           (3)用计算机解题往往从很多种可能性中寻找其中的一种或几种,应此最容易想到的

              是枚举法,枚举法就会遇到大量的重复计算的问题,自然要用到循环结构,我在

              程序中用了五重循环,想不用循环,却没能实现,欢迎大家提供不用循环的更好

              的解法,我的QQ 348653994

            (4)程序在VC++6.0下通过.

                    (5)运行结果:

                         A的名次是:3

                         B的名次是:1

                         C的名次是:5

                         D的名次是:2

                         E的名次是:4

        程序原码:

     #include <iostream.h>
    void main()
    {
     int cc1,cc2,cc3,cc4,cc5;    //cc1到cc5代表5位选手的逻辑判断
     int i,j,k,m,n;             //i,j,k,m,n用于循环控制
     int A,B,C,D,E;            //A,B,C,D,E分别代表5位选手的名次
     int g;                    //问题是否解决的BOOL值
     A=0;B=0;C=0;D=0;E=0;g=0;
     for(i=1;i<=5,A<=4;i++)
     {   A++;
         B=0;
      for(j=1;j<=5,B<=4;j++ )
      { 
         B++;
        if(B==A)
           B++;
         C=0;
         for(k=1;k<=5,C<=4;k++ )
         { C++;
           if(C==A)
             C++ ;
           if(C==B)
             C++;
           D=0;
            for(m=1;m<=5,D<=4;m++ )
         { D++;
           if(D==A)
             D++;
           if(D==B)
             D++;
           if(D==C)
             D++;
              E=0;
           for(n=1;n<=5,E<=4;n++)
         {   E++;
             if(E==A)
              E++;
            if(E==B)
              E++;
            if(E==C)
             E++;
          if(E==D)
            E++;

                    cc1=((B==2)&&(!(A==3)))||((!(B==2))&&(A==3))

    [1] [2] 下一页