zoukankan      html  css  js  c++  java
  • 算法-经典趣题-新郎和新娘

    一、问题

    新郎和新娘问题是非常典型的智力推理问题。

    新郎和新娘问题的大意如下:

    有三对新郎和新娘参加集体婚礼,三个新郞为A、B、C,三个新娘为X、Y、Z。主持婚礼的人一时间忘了谁应该和谁结婚。于是,他便问参加婚礼的6个人中的三个,得到的回答如下:

    新郎A说他将和新娘X结婚;

    新娘X说她将和新郎C结婚;

    新郎C说她将和新娘Z结婚。

    聪明的主持人知道他们在与他开玩笑,但是,此时主持人已经推算出了谁应该和谁结婚。那么,到底是谁应该和谁结婚呢?

    二、分析

    我们来分析下问题,三个新郎和三个新娘随机结婚的话,共有6种可能,根据前面所述的3个错误条,便可以采用穷尽法来逐个对照,直到找到正确的结婚对象。

    现在我们将A、B、C这3人分别用 1、2、3 表示,将X和A结婚表示为"X=1",将X与C结婚表示为"X=3",将C与Z结婚表示为"Z=3"。按照题目中的叙述可以写出表达式:

    • X!=1 A不与X结婚

    • X!=3 X不与C结婚

    • Z!=3 C不与Z结婚

      题意还隐含着X、Y、Z这3个新娘不能结为配偶,则有:X!=Y 且X!=Z且Y!=Z,穷举以上所有可能的情况,代入上述表达式中进行推理运算,若假设的情况使上述表达式的结果均为真,则假设情况就是正确的结果。

    三、编程

    package com.joshua317;
    
    public class Main {
        public static void main(String[] args) {
            char[] husband = {'A', 'B', 'C'};
            char[] wife = {'X', 'Y', 'Z'};
            int i;
            System.out.println("参加婚礼的新郎为:");
            for (i=0; i<3; i++) {
                System.out.printf(" %c", husband[i]);
            }
            System.out.println();
            System.out.println("参加婚礼的新娘为:");
            for (i=0; i<3; i++) {
                System.out.printf(" %c", wife[i]);
            }
            System.out.println();
    
            int X, Y, Z;
    
            //假定A、B、C这3人分别用 1、2、3 表示
            //穷举x的全部可能配偶
            for (X = 1; X <= 3; X++) {
                //穷举y的全部可能配偶
                for (Y = 1; Y <= 3; Y++) {
                    //穷举z的全部可能配偶
                    for (Z = 1; Z <= 3; Z++) {
                        if (X!=1 && X!=3 && Z!=3 && X!=Y && Y!=Z && X!=Z) {
                            //得到X,Y,Z对应的值
                            System.out.printf("X的值:%d, Y的值:%d, Z的值:%d
    ", X,Y,Z);
                            //打印匹配的结果
                            System.out.printf("X与%c结婚
    ", husband[X-1]);
                            System.out.printf("Y与%c结婚
    ", husband[Y-1]);
                            System.out.printf("Z与%c结婚
    ", husband[Z-1]);
                        }
                    }
                }
            }
        }
    }
     
     

     

  • 相关阅读:
    css3
    css3
    npm 安装包无法继续下载? 卡住
    tcp/ip协议中的SYN, ACK的数值变化
    【转】6 Reasons Why JavaScript’s Async/Await Blows Promises Away (Tutorial)
    ES6 中 Symbol.split的用法
    Why does Typescript use the keyword “export” to make classes and interfaces public?
    es6中的import,export浏览器已经支持
    Understanding the JavaScript Engine—— two phase
    【转】js-ES6学习笔记-Symbol
  • 原文地址:https://www.cnblogs.com/joshua317/p/15381024.html
Copyright © 2011-2022 走看看