zoukankan      html  css  js  c++  java
  • 100c之48:新郎与新娘

    问题

    三对情侣结婚。新郎是A,B,C。新娘是X,Y,Z。有人不知道谁和谁结婚,于是询问了六个人中的三个。得到如下回复:A说他和X结婚,X说她的未婚夫是C,C说他将和Z结婚。这人听后确认这三个人都在开玩笑说假话,请你推断到底谁要和谁结婚。

    分析

    假设新郎新娘分别编号0,1,2。按照题目要求,有一下隐含条件:

    1. 1) 新郎之间不能结婚,新娘之间也不能结婚( 在这里,婚姻只限于男女之间)
    2. 2) 一个新郎只能取一个新娘,而且一个新娘也只能嫁一个新郎。
    3. 3) 0号新郎不能跟0号新娘结婚;
    4. 4) 2号新郎不能跟0号新娘结婚;
    5. 5) 2号新郎不能跟2号新娘结婚;

    在程序实现过程中设定变量 i,j,k 本别代表新郎0,1,2的哑元变量,采取对这三个哑元变量进行赋值的方式遍历可能的结婚方式。在遍历的过程中,由于新浪i不能跟0号新娘结婚,所以i可以从1开始。

    程序

     1:  /**
     2:   * @file   048c.c
     3:   * @author Chaolong Zhang <emacsun@163.com>
     4:   * @date   Tue Jul  9 16:21:12 2013
     5:   * 
     6:   * @brief  三对情侣结婚。新郎是A,B,C。新娘是X,Y,Z。有人不知道谁和谁结婚,于是询问了六个人中的三个。得到如下回复:A说他和X结婚,X说她的未婚夫是C,C说他将和Z结婚。这人听后确认这三个人都在开玩笑说假话,请你推断到底谁要和谁结婚。
     7:   * 
     8:   * 
     9:   */
    10:  
    11:  
    12:  #include <stdio.h> 
    13:  
    14:  int main(int argc, char *argv[])
    15:  {
    16:  
    17:      for (int i = 1; i < 3; ++i){
    18:          for (int j = 0; j < 3; ++j){
    19:              for (int k = 0; k < 3; ++k){
    20:                  if (i==j || j==k || i==k || k==0 || k==2) ;
    21:                  else printf ("i=%d,j=%d,k=%d
    ",i,j,k);
    22:              }
    23:          }
    24:      }
    25:      return 0;
    26:  }
    

    输出结果

    i=2,j=0,k=1
    

    表明A新郎和Z新娘结婚,B新郎和X新娘结婚,C新郎和Y新娘结婚

  • 相关阅读:
    Luogu4433:[COCI2009-2010#1] ALADIN(类欧几里德算法)
    Bzoj4766: 文艺计算姬(Matrix-tree/prufer)
    Bzoj5019: [Snoi2017]遗失的答案
    [HAOI2009]逆序对数列(加强)
    CF850F Rainbow Balls
    Luogu4887 第十四分块(前体)
    Luogu2483 [SDOI2010]魔法猪学院(可并堆)
    导数积分表
    Bzoj2395: [Balkan 2011]Timeismoney(最小乘积生成树)
    Min_25筛
  • 原文地址:https://www.cnblogs.com/chaolong/p/3180754.html
Copyright © 2011-2022 走看看