• 5.8新娘与新郎


    Q:3对新郎新娘,3个新郎ABC,3个新娘XYZ。A说他将和X结婚,X说她的未婚夫是C,C说他将和Z结婚。已知三人说话都是假的。

    思路一:直接用数学分析,然后排除。

    #include <iostream>
    using namespace std;
    
    int main() {
    	cout<<"A"<<"--"<<"Z"<<endl; 
    	cout<<"B"<<"--"<<"X"<<endl;
    	cout<<"C"<<"--"<<"Y"<<endl;
    	 
    	return 0;
    }
    

    思路二:

    husband[0]   wife[i]
    husband[1] wife[j]
    husband[2] wife[k]

    规定wife[i]为husband[0]的新娘,wife[j]为husband[1]的新娘,wife[k]为husband[2]的新娘、i,j,k的值在0~2中不断变化,这样随着i,j,k的每一次调整,就能得到一种配对方案。这里必须注意i!=j!=k,否则会出现“2个新郎配一个新娘”的情况。

    代码如下:

    #include <iostream>
    using namespace std;
    
    int match(int i,int j,int k,char wife[]) {
    	if(wife[i]=='X')	return 0;
    	if(wife[k]=='X')	return 0;
    	if(wife[k]=='Z')	return 0;
    	return 1;
    }
    
    int main() {
    	char husband[3]={'A','B','C'},wife[3]={'X','Y','Z'};
    	int i,j,k;
    	for(i=0;i<3;i++)	//新郎A的配对 
    	for(j=0;j<3;j++)	//新郎B的配对 
    	for(k=0;k<3;k++)	//新郎C的配对 
    		if(i!=j &&j!=k &&i!=k ) {  //不能一个新郎配2个新娘或者一个新娘配2个新郎
    			if(match(i,j,k,wife)) {
    				cout<<"husband wife"<<endl;
    				cout<<"A-------"<<wife[i]<<endl;
    				cout<<"B-------"<<wife[j]<<endl;
    				cout<<"C-------"<<wife[k]<<endl;
    				
    			}
    		}
    	return 0;
    }
    

      

     

    拥抱明天! 不给自己做枷锁去限制自己。 别让时代的悲哀,成为你人生的悲哀。
  • 相关阅读:
    【设计模式】迭代器模式
    SpringMVC+Hibernate+Junit4+json基本框架近乎0配置
    Python
    Flex中TabNavigator隐藏和显示选项卡
    Android调试工具_ Stetho
    discuz的php7版本号
    分组加密的四种模式(ECB、CBC、CFB、OFB)
    人件札记:保持高效的办公室环境
    UVA 4857 Halloween Costumes 区间背包
    相机标定(Camera calibration)
  • 原文地址:https://www.cnblogs.com/dd2hm/p/6780742.html
Copyright © 2020-2023  润新知