新郎新年结婚问题-java

三对情侣参加婚礼,三个新郞为A、B、C,三个新娘为X、Y、Z。有人不知道谁和谁结婚,于是询问了六位新人中的三位,但听到的回答是这样的: A说他将和X结婚;X说她的未婚夫是C;C说他将和Z结婚。  这人听后知道他们在开玩笑,全是假话。请编程找出谁将和谁结婚。
        //A说他将和X结婚;X说她的未婚夫是C;C说他将和Z结婚。

        // 假设 abc  对应  123(xyz)

这道题的解法是需要遍历所有的可能, 刚开始的想法是 3*3 次 可以遍历所有的可能, 就是 一个嵌套循环就可以了,然后发现问题没有那么简单,因为遍历的时候还需要如果 其中新郎新娘有条件 不符合 需要重新遍历寻找例外一种组合的可能,所以需要 换种模型,将  三个新郎 ABC,抽象成三个 循环嵌套,就能遍历所有的可能了,新郎A 第一个循环可能搭配 XYZ 中的 任意一个,新郎 B 和 新郎C 同样也是,但是需要注意限制条件,除里上面的三个条件以外,还有个隐藏条件, 新郎对应的新娘分别都是不同的,所以逻辑上是 新郎A 对应 新娘 XYZ 的时候,新郎B 和 新郎 C 同样在 内循环中对应 新娘 XYZ,代码如下:

    for (int a = 1; a <= 3; a++) {
            
            for (int b = 1; b <= 3; b++) {
                
                for (int c = 1; c <= 3; c++) {
                 
                }
                
            }
            
        }

三个循环嵌套,将所有的可能都包含了,然后需要加上判断条件1.flag是新郎新娘不能重复交叉的判断条件,2.flag1是题目给出的判断条件,如下:
        
        char cs[] = {'x','y','z'};
        
        for (int a = 1; a <= 3; a++) {
            
            for (int b = 1; b <= 3; b++) {
                
                for (int c = 1; c <= 3; c++) {
                    
                    boolean flag = a != b && a != c && b !=c;

                     boolean flag1 = a != 1 && c!= 1  && c != 3;                   
                    if(flag1 &&  flag){
                        System.out.println(cs[a-1]+"-"+cs[b-1]+"-"+cs[c-1]);
                    }
                    
                }
                
            }
            
        }


完整的 class 类代码如下:

package dataStract;

public class XlxlTest {

    public static void main(String[] args) {
        
        char cs[] = {'x','y','z'};
        
        for (int a = 1; a <= 3; a++) {
            
            for (int b = 1; b <= 3; b++) {
                
                for (int c = 1; c <= 3; c++) {
                    
                    boolean flag = a != b && a != c && b !=c;

                     boolean flag1 = a != 1 && c!= 1  && c != 3;                   
                    if(flag1 &&  flag){
                        System.out.println(cs[a-1]+"-"+cs[b-1]+"-"+cs[c-1]);
                    }
                    
                }
                
            }
            
        }
    }
}

  

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值