愿尔安然无恙


私信TA

用户名:H2130819045

访问量:13750

签 名:

向往星辰大海,喜欢落日晚风。

等  级
排  名 63
经  验 10707
参赛次数 16
文章发表 56
年  龄 20
在职情况 学生
学  校 贺州学院
专  业 软件工程

  自我简介:

不想改bug ^_^

**********************************************************************************************************************


^_^                    ^_^                    ^_^                    ^_^                    ^_^                    ^_^                   ^_^                    


1.后面的题解是以前写的,思路并不清晰,只是简单套用知识,也没做分析,也是今天才发现有点不堪入目,所以过来补个题解;


2.也查看了一些其他人的题解,发现对小白不太友好,不过我暂时还简化不了,于是转载修改了一下老师的题解,仅供参考;


 **********************************************************************************************************************


解题思路:


由题目可以知道的是


分数和成绩的关系 (二者之和为10) ————(1,9)(2,8) (3,7)..........


第一名是李家,第二名是王家,因为各家名次不连续,所以第三名肯定是张家,接着对其后6个孩子,成绩为1到6分,进行排列判断;


因为各家总分相同(各15分),所以可以推导各家应得总分(减去已知)————张家(15-7),王家(15-8),李家(15-9);


**********************************************************************************************************************


ps:


最后结果为李-王-张-王-李-张-李-张-王;


张家(7,5,3),王家(8,6,1),李家(9,4,2);


**********************************************************************************************************************

参考代码:

#include<iostream>
#include<algorithm>
#include<cmath>
#define N 6
using namespace std;
int main()
{      
     int score[N]={1,2,3,4,5,6};
     char children[N]={'Z','Z','W','W','L','L'};
	  //各家孩子用两个空间来表示,比如0,1这两个下标是张家的,但里面的元素值是变动的,实质上是内部元素的线性移动(即排列)
	  //直到一种排列满足条件,里面的成绩(名次)固定,但下标依旧不变 
     do
     {
         if(score[0]+score[1]==15-7 && score[2]+score[3]==15-8 && score[4]+score[5]==15-9) 
         {
         	//各家不能连续排名,所以名次差不能为 1 ,绝对值包含前大后小,后小前大两种可能的连续 
             if( abs(score[0]-score[1])==1 ) continue; 
             if( abs(score[2]-score[3])==1 ) continue;
             if( abs(score[4]-score[5])==1 ) continue;
             break;//都满足的话跳出 
         } 
     }while(next_permutation(score,score+N));//全排列函数(参数不懂的就查阅相关资料哈)
	 //如果是自己写枚举的话,要注意去重; 
     for(int i=0;i<N;i++)
     	if(score[i]==1)//最后一名(成绩为1)
            cout<<children[i]<<endl; 
     return 0;
}

以下不建议查看,黑历史;

#include<iostream>
 
#include<cmath>
 
using namespace std;
 
bool hfd(int a,int b,int c)//判断其余两家是否符合条件
 
{
 
      int cunt=0;
 
      for(int i=1;i<=9;i++)//枚举所有情况 
 
      {
 
         if(i!=a&&i!=b&&i!=c)
 
              {
 
                  for(int j=1;j<=9;j++)
 
                    {
 
                        if(j!=a&&j!=b&&j!=c)
 
                            {
 
                                 for(int k=1;k<=9;k++)
 
                                 {
 
                                     if(k!=a&&k!=b&&k!=c)
 
                                     {
 
                                         if(i+k+j==15&&i!=j&&j!=k&&i!=k&&abs(i-j)!=1&&abs(j-k)!=1&&(i-k)!=1)//每家15分,没有相同得分,且得分不相连; 
 
                                         {
 
                                                 if(i>j&&j>k)//去重 
 
                                                 cunt++;//符合则统计 
 
                                          }
 
                                     }
 
                               }
 
                         }
 
                    }
 
              }
 
         }
 
    if(cunt==2)//两家都符合 
 
         return true;
 
    else
 
         return false;
 
}
 
 
 
int main()
 
{
 
     for(int i=1;i<=9;i++)//枚举所有情况 
 
     {
 
         for(int j=1;j<=9;j++)
 
         {
 
                 for(int k=1;k<=9;k++)
 
                 {
 
                     if(i+k+j==15&&i!=j&&j!=k&&i!=k&&abs(i-j)!=1&&abs(j-k)!=1&&(i-k)!=1)//每家15分,没有相同得分,且得分不相连; 
 
                     {
 
                         if(i>j&&j>k)//去重
 
                         {
 
                             if(k==1)//最后一名的那一家 
 
                             {
 
                                 if(hfd(i,j,k))//判断其余两家是否符合条件 
 
                                 {
 
                                         if(i==9)//李家
 
                                              cout<<"L"<<endl; 
 
                                         else if(i==8)//王家
 
                                              cout<<"W"<<endl;
 
                                         else//张家
 
                                              cout<<"Z"<<endl;
 
                                    }
 
                                 }
 
                            }
 
                     } 
 
                }
 
         }
 
     }
 
return 0;


 

0.0分

1 人评分

  评论区

  • «
  • »