• Java之趣味编程结婚问题


    问题如下:
    判断结婚的组合对数数。
    定义: 好三位新郎为 A,B,C ;三位新娘为X,Y,Z
    有人想要知道他们谁和谁结婚 ,于是问了其中的三位。 
    回答是这样的:A说他将和X结婚 ;X说她的未婚夫是C ;C说他将和Z结婚,
    这个人听到他们在开玩笑,全部在说谎话,请编程。

    package JieHun;
    
    public class JieHun {
    
        /**   这边【程序 是 详细注释 代码:】
         * @param args
         * 判断结婚的    组合对数数
         * 定义: 好三位新郎为 A,B,C   ;三位新娘为X,Y,Z   
         *    有人想要知道他们谁和谁结婚  ,于是问了其中的三位 
         * 回答是这样的:A说他将和X结婚 ;X说她的未婚夫是C ;C说他将和Z结婚,  
         * 这个人听到他们在开玩笑,全部在说谎话,请编程    
         */
        public static String nan[]={"A","B","C"};
        public static String nv[]={"X","Y","Z"};
        
         
        public static String shuju1,suoyou ;//程序测试
        public static void main(String[] args) {
            String[] ZuheA=new String[2];
            String[] ZuheB=new String[3];
            String[] ZuheC=new String[1];    //必须 要创建数组对象
            int a=0,b=0,c=0;//进入一个数据就加一个数据 ,数据必须要写在循环的外面,不然循环一次就 清零了
            
            int ce1=0,ce2=0,ce3=0;
            //定义: 好三位新郎为 A,B,C;
            //三位新娘为X,Y,Z   
            /**
             * 1.确定好有多少 种组队的 样式   AX--AY--AZ;  BX--BY--BZ ; CX--CY--CZ;
              */
            //System.out.print("长度是"+nan.length);
            for (int i = 0; i <nan.length; i++) {//将【新郎】遍历 
                String nandui=nan[i];
                for (int j = 0; j <nv.length; j++) {//将【新娘】遍历 
                    //System.out.println("最后的【i】:"+i+"和【j】:"+j);//测试 数据
                    String nvdui=nv[j];
                    String ZuHe=nandui+nvdui;//组合结婚的对数
                    /*   【测试程序】  
                     suoyou +=" "+ZuHe+", ";
                     System.out.println("这是【开始(ce1)】第:"+ce1+"输出结果:"+suoyou);//程序测试
                     ce1++;
                     */
                    //char[] ZuheA=null,ZuheB=null,ZuheC=null;//组合对数值  就是ZuheA AX--AY--AZ  这就是数组形式
                    
    //                List<String> listA = new ArrayList<String>();
    //                List<String> listB = new ArrayList<String>();
    //                List<String> listC = new ArrayList<String>();  //获取组合 数据
                    
                    //A说他将和X结婚 ;【  为假 】    那么就可以让  AY--AZ ………… 进入 
                    if(!ZuHe.equals("AX")){ //这里面不需要 在&&!ZuHe.equals("XA") 因为这里面始终以 男同志为开头
                    //    System.out.println("我是A一号判断:"+ZuHe);//程序测试
                    //    if(ZuHe.matches("[\w]+A")){//这里面  -采用的正则表达式      只让含 A开头的数据进入
                        //上面的 采用的正则表达式  这个有点问题 若是中间的  字符他说查不到的
                    /** 【测试程序】 
                     * suoyou +=" "+ZuHe+", ";
                      System.out.println("这是【A】(ce2)第:"+ce2+"输出结果:"+suoyou);//程序测试
                      ce2++;
                    */  
                        //【方法二】 if(!ZuHe.equals("AX") && ZuHe.matches(".*A.*"))    注意:这个【 可以使用】else if
                        //【方法一】  这是为了明了  这个【不能使用 】else if
                        if(ZuHe.matches(".*A.*")){ // 用java正则表达式检测字符串中是否含有某字符
                            //System.out.println("我是A二号判断:"+ZuHe);//程序测试
                            ZuheA[a]=ZuHe;
                            //System.out.println("数据a:"+a);//程序测试
                            //ZuheA = ZuHe.toCharArray();// 这是char类型的
                            //ZuheA = ZuHe.toString();
                            //System.out.println(ZuheA);
                            //listA.add(ZuHe);
                            //ZuheA = listA.toArray(new String[a]);
                            a++;
                        }
                    }
                    //X说她的未婚夫是C ;也就是说:C是X的未婚夫   因为 我这里面始终 以男性 为开头。  【  为假 】  那么就是  除去CX-(XC) 都可以进入
                    //else if (!ZuHe.equals("CX")) { //【注意:】 这里面不能使用  else if()因为使用了 这个 就会导致 只要上面的条件满足 (也就会上面if)条件满足 他就不会在在下面 进行判断
                                            //除非 将上面的那两重if语句 写在一起  那样这下面就可以使用  else if   【方法二】 if(!ZuHe.equals("AX") && ZuHe.matches(".*A.*"))  这样就可以 在下面使用else if
                    if (!ZuHe.equals("CX")) {    
                    //C说他将和Z结婚   【为假】   所以 下面 的数据可以进入 
                    /*    【测试程序】 
                      suoyou +=" "+ZuHe+", ";
                      System.out.println("这是【C(ce3)】第:"+ce3+"输出结果:"+suoyou);//程序测试
                      ce3++;
                    */  
                    /*    if(ZuHe.equals("CY")){
                            System.out.println("出现了CY数据:"+ZuHe);
                        }*/
                        if(!ZuHe.equals("CZ")){
                            
                            //if(ZuHe.matches("[\w]+C")){//这里面  -采用的正则表达式      只让含 C开头的数据进入
                            if(ZuHe.matches(".*C.*")){ 
                                ZuheC[c]=ZuHe;     //注意:这里面其实只又一个数据 就是CY
                                //ZuheC = ZuHe.toCharArray();// 这是char类型的
                                //listC.add(ZuHe);//添加数据
                                //ZuheC =listA.toArray(new String[c]);
                                //System.out.println("出现了CY数据:"+ZuHe);
                                c++;
                            }
                        }
                    }
                    //这里面  -采用的正则表达式      只让含 B开头的数据进入   这里面是有三组数据
                    //if(ZuHe.matches("[\w]+B")){
                //else if(ZuHe.matches(".*B.*")){ //【注意:】 这里面不能使用  else if()因为使用了 这个 就会导致 只要上面的条件满足 (也就会上面if)条件满足 他就不会在在下面 进行判断
                                                    //除非 将上面的那两重if语句 写在一起  那样这下面就可以使用  else if
                 if(ZuHe.matches(".*B.*")){     
                        ZuheB[b]=ZuHe;     //注意:这里面其实只又一个数据 就是CY
                        //ZuheB = ZuHe.toCharArray();// 这是char类型的
                        //listB.add(ZuHe);
                        //ZuheB=listB.toArray(new String[b]);
                        b++;
                    }
                    
                    //就是将获取的数据进行组合匹配  组合匹配的数据 必须是要将  最外层的数据循环完成  在进行  也就是  i=2;j=2的时候
                    if(i==2 && j==2){//这样他们的数据就已经全部匹配完成了
                        for (int k = 0; k < ZuheA.length; k++) {
                            String qeiA=ZuheA[k];//获取 为真的   数据
                            for (int l = 0; l < ZuheB.length; l++) {
                                String qeiB=ZuheB[l];
                                for (int m = 0; m < ZuheC.length; m++) {
                                    String qeiC=ZuheC[m];
                                    String QuanBu=qeiA+""+qeiB+""+qeiC;//这里面是为了判断该 数据是否 有 相同 的字符    【因为】这里面不能出现相同的数据   因为 中国法律规律  一夫一妻制  所以 结婚 组合 也是如此  每个人对应一个
                                    String QuanBu1=" "+qeiA+","+qeiB+","+qeiC+" ";//这里是为了进行打印而做的备份数据    不做就要 在进行 将数据进行分解 或者加入 空格
                                    System.out.println("		第【k】"+k+"  【l】"+l+"  【m】"+m+"可以出现这么种:组合结果:"+  QuanBu);
                                    //int cfA,cfB,cfC;//不允许重复的个数
                                    //if(QuanBu.matches("^.*?(.+?)\1.*?$")){//正则表达式 不允许这里面有着重复的数据(也就是重复的字符串)   这个正则表达式有问题
                                    if(QuanBu.matches("(?!.*(.).*\1)")){//表示字符串中【不含】重复字符
                                        System.out.println("
    	由于不可能出现这么多种结果,也不可能出现 一对多  只能出现一对一  所以最终 结婚对数如下");
                                        System.out.println("
    
    		【最终结婚的组合】是:"+  QuanBu1);
                                    }
                                }
                            }
                        }
                    }
                }
            }
    
        }
        
    }

    run:

            第【k】0  【l】0  【m】0可以出现这么种:组合结果:AYBXCY
            第【k】0  【l】1  【m】0可以出现这么种:组合结果:AYBYCY
            第【k】0  【l】2  【m】0可以出现这么种:组合结果:AYBZCY
            第【k】1  【l】0  【m】0可以出现这么种:组合结果:AZBXCY
            第【k】1  【l】1  【m】0可以出现这么种:组合结果:AZBYCY
            第【k】1  【l】2  【m】0可以出现这么种:组合结果:AZBZCY
    不努力,还要青春干什么?
  • 相关阅读:
    题目1007:奥运排序问题(自定义排序问题)
    题目1005:Graduate Admission(录取算法)
    九度OJ小结2
    题目1049:字符串去特定字符(简单字符判断)
    题目1111:单词替换(字符串查找)
    题目1168:字符串的查找删除(字符串操作)
    题目1455:珍惜现在,感恩生活(多重背包问题)
    题目1454:Piggy-Bank(完全背包问题)
    题目1453:Greedy Tino(dp题目)
    题目1452:搬寝室(dp题目)
  • 原文地址:https://www.cnblogs.com/caidupingblogs/p/5360518.html
Copyright © 2020-2023  润新知