我有个喵喵酱


私信TA

用户名:firstblond

访问量:8650

签 名:

每天都要进步一点点!

等  级
排  名 709
经  验 3911
参赛次数 0
文章发表 19
年  龄 21
在职情况 学生
学  校 家里蹲
专  业

  自我简介:

解题思路:

                李,张,王家一共九名孩子,第一名是李家孩子,第二名是王家孩子,不能并列,比赛结果各家总分相同

                这题的重点在于各家总分相同,且名次不会重复

                先用数学思路来理解,各家总分相同,即9名孩子总分:1+2+3+4+5+6+7+8+9=45分

                每一家的分数只能是45的被除数,即45/3=15分/每家;

                也就是说,第三名肯定是张家的孩子.

                我们不妨再换个思路来想,从赌博的方式来思考:

                假设李张王三个人是牌友,且三人都只剩三张牌, 假设是玩逆向干瞪眼:

                (干瞪眼的玩法就是下一家只能出比上一家大的牌,且那张牌只能是相邻的,即上家出3下家只能4,先

                如果没有则跳过出牌,优先出完手中的牌的玩家获胜)  

                (逆向干瞪眼则是下一家只能出比上一家小的,且相邻的牌,即上家出3,下家只能出2)

                那么根据题意,三人手牌为:   

           

                    李:9,4,2

                    王:8,6,1

                    张:7,5,3

                根据手牌,最后一位出牌的是王家,所以王是最后一名

                通过直接提交代码:

            

                        #include<stdio.h>                                                                                                
                        int main()                                                      
                        { 
                                 printf("W");
                                 return 0;
                        }

                

                        都可以通过提交,反馈的也是正确,验证了我的想法.

                      

                    

                但是!!!!!!

                直接提交张家和李家最后一名也可以:

                        #include<stdio.h>                                                                                                
                        int main()                                                      
                        { 
                             printf("L");
                             return 0;
                        }

                         和

                        #include<stdio.h>                                                                                                
                        int main()                                                      
                        { 
                             printf("Z");
                             return 0;
                        }

            

                 

注意事项:
        



参考代码:

                

                #include <stdio.h>
                int score[4][4];
                int main(){   
                int i,j,k,who;   
                score[1][1]=7;//二维数组score的第1行可以看成一个一维数组,表示张家孩子成绩 
                score[2][1]=8;  //同上 第二行王家孩子成绩   
                score[3][1]=9;  // 第三行李家孩子成绩  
                for(i=4;i<6;i++)  //李家第二范围      
                    for(j=4;j<7;j++)  //王家第二范围       
                        for(k=4;i!=j&&k<7;k++)  //张家第二范围 ,3个for语句说明了3家中都没有相连名次       
                            if(k!=i&&k!=j&&15-i-score[1][1]!=15-j-score[2][1]                    
                                &&15-i-score[1][1]!=15-k-score[3][1]                   
                                    &&15-j-score[2][1]!=15-k-score[3][1])  

                //第一个与表示张家第二成绩不同于李家王家,第2,3,4,个与表   示3家第3名成绩不一样   
                            {     
                                    score[1][2] =i;     
                                    score[1][3]=15-i-7;     
                                    score[2][2]=j;    
                                    score[2][3]=15-j-8;     
                                    score[3][2]=k;     
                                    score[3][3]=15-k-9;  
                           }   
                for(who=0,i=1;i<=3;i++,printf("\n"))   
                    for(j=1;j<=3;j++)

                    {     
                         printf("%d",score[i][j]);     
                             if(score[i][j]==1) //最后一名得分成绩为1         
                                  who=i;  
                    }  
                if(who==1)       
                     printf("最后一名是张家孩子\n");  
                else if(who==2) 
                     printf("最后一名是王家孩子\n"); 
                else      
                     printf("最后一名是李家孩子");
                }

               

 

0.0分

0 人评分

  评论区

  • «
  • »