1. 题目要求

新郎A,B,C与新娘 X,Y,Z。有人不知道她们谁和谁结婚了,询问了6位新人中的三位,A说他将和X结婚,X说她的未婚夫是C,C说她会和Z结婚,一听就知道是全是假话,请编程找出谁和谁结婚

2. 题目分析

what!这是什么情况!这是什么混乱的关系。才看完问题之后发现没有什么线索呢?只有一句全是假话,所以上述的关系就可以作为排除,还是用穷举法,然后排除上面的情况。

所以,目前我的思路是,没有看参考答案的思路就是先列出所有可能情况,然后再对条件排除。

3. 代码尝试

【难点】如何表示解空间?有没有什么方法呢?

for(i=0;i<3;i++){

for(j=0;j<3;j++){

for(k=0;k<3;k++){

if(i!=k&&j!=k&&i!=j){ //判断不是同一个新郎

}

}

}

}

【难点】如何表示排除关系呢?

if(wife[i] == 'X') return 0;其实这句话的意思就是:i对应的一定不是‘X’,一定要好好体会呢!

【代码1】

#include <stdio.h>

int isMatch(int i,int j,int k , char wife[]){

if(wife[i] == 'X') return 0;

if(wife[j] == 'Y') return 0;

if(wife[k] == 'Z') return 0;

return 1;

}

int main(){

char hansband[3]={'A','B','C'};

char wife[3]={'X','Y','Z'};

int i,j,k;

for(i=0;i<3;i++){

for(j=0;j<3;j++){

for(k=0;k<3;k++){

if(i!=k&&j!=k&&i!=j){ //判断不是同一个新郎

if(isMatch(i,j,k,wife)){

printf("husband  wife\n");

printf("A ---- %c\n",wife[i]);

printf("B ---- %c\n",wife[j]);

printf("C ---- %c\n",wife[k]);

}

}

}

}

}

return 0;

}

可以看出结果是有问题的呢!

 

错误原因:

一点点小小的成就就冲昏了头脑呢,约束条件也太相当让了吧~

#include <stdio.h>

int Match(int i,int j,int k , char wife[]){

if(wife[i] == 'X') return 0; X与A不会结婚

if(wife[k] == 'X') return 0; X与C不会结婚

if(wife[k] == 'Z') return 0; Z与C不会结婚

return 1;

}

int main(){

char hansband[3]={'A','B','C'};

char wife[3]={'X','Y','Z'};

int i,j,k;

for(i=0;i<3;i++){

for(j=0;j<3;j++){

for(k=0;k<3;k++){

if(i!=k&&j!=k&&i!=j){ //判断不是同一个新郎

if(Match(i,j,k,wife)){

printf("husband  wife\n");

printf("A ---- %c\n",wife[i]);

printf("B ---- %c\n",wife[j]);

printf("C ---- %c\n",wife[k]);

}

}

}

}

}

return 0;

}

4. 总结

这个问题看似复杂,只要开始想一想,其实也是有思路可以找到的,其实这道题是前两天因为其他事情耽搁了,本来应该早一点就写好的。也是从解空间中找出符合问题条件的解,但需要注意的是对约束条件不能像当然呢,一定要想清楚!!

【C语言编程练习】新娘与新郎的更多相关文章

  1. C语言编程实现Linux命令——who

    C语言编程实现Linux命令--who 实践分析过程 who命令是查询当前登录的每个用户,它的输出包括用户名.终端类型.登录日期及远程主机,在Linux系统中输入who命令输出如下: 我们先man一下 ...

  2. 个人c语言编程风格总结

    总结一下我个人的编程风格及这样做的原因吧,其实是为了给实验室写一个统一的C语言编程规范才写的.首先声明,我下面提到的编程规范,是自己给自己定的,不是c语言里面规定的. 一件事情,做成和做好中间可能隔了 ...

  3. Linux下C语言编程实现spwd函数

    Linux下C语言编程实现spwd函数 介绍 spwd函数 功能:显示当前目录路径 实现:通过编译执行该代码,可在终端中输出当前路径 代码实现 代码链接 代码托管链接:spwd.c 所需结构体.函数. ...

  4. 混合语言编程:启用CLR(公共语言运行时编译)让C#调用C++

    前言 关于混合C#和C++的编程方式,本人之前写过一篇博客(参见混合语言编程:C#使用原生的Directx和OpenGL),在之前的博客中,介绍了在C#的Winform和WPF下使用原生的Direct ...

  5. Linux基础与Linux下C语言编程基础

    Linux基础 1 Linux命令 如果使用GUI,Linux和Windows没有什么区别.Linux学习应用的一个特点是通过命令行进行使用. 登录Linux后,我们就可以在#或$符后面去输入命令,有 ...

  6. LINUX下C语言编程基础

    实验二 Linux下C语言编程基础 一.实验目的 1. 熟悉Linux系统下的开发环境 2. 熟悉vi的基本操作 3. 熟悉gcc编译器的基本原理 4. 熟练使用gcc编译器的常用选项 5 .熟练使用 ...

  7. 第二章 C语言编程实践

    上章回顾 宏定义特点和注意细节 条件编译特点和主要用处 文件包含的路径查询规则 C语言扩展宏定义的用法 第二章 第二章 C语言编程实践 C语言编程实践 预习检查 异或的运算符是什么 宏定义最主要的特点 ...

  8. 华为C语言编程规范

    DKBA华为技术有限公司内部技术规范DKBA 2826-2011.5C语言编程规范2011年5月9日发布 2011年5月9日实施华为技术有限公司Huawei Technologies Co., Ltd ...

  9. 9 本免费的 Python 语言编程书籍(转载)

    9 本免费的 Python 语言编程书籍 原文地址:http://linuxtoy.org/archives/9-free-python-books.html 2010-03-03 Toy Poste ...

  10. linux 操作系统下c语言编程入门

    2)Linux程序设计入门--进程介绍 3)Linux程序设计入门--文件操作 4)Linux程序设计入门--时间概念 5)Linux程序设计入门--信号处理 6)Linux程序设计入门--消息管理  ...

随机推荐

  1. Python 面试总结

    公司面试: 1,说说项目都用到了什么技术? 2,mysql索引的种类? 3,索引建多有什么不好? 4,mysql的引擎有什么? 5,redis是单线程还是多线程的? 6, redis的持久化机制? 7 ...

  2. Matcher.replaceFirst(String replacement)

    java.util.regex.Matcher.replaceFirst(String replacement)方法是用来进行字符串的替换操作. public String replaceFirst( ...

  3. C# 创建Web项目时 可以选择的类型在不同VS版本下的对比

    上面这个界面应该是 vs2010的 一. VS2012 .VS2013 其实每个模板的意思,在右边已经显示出来了.Empty,就是一个空的模板,创建后里面除了一个web.config外什么都没有:We ...

  4. Windows如何上传代码到Github

    1.首先得安装git客户端 进入官网:https://git-scm.com/ ,点击右侧下载windows版本的软件包,然后双击安装就可以了. 安装完成之后,在开始菜单可以看到,此时,在想上传的文件 ...

  5. Hutool工具里,POST方法,body中传参的几种调用方法

    接口说明: POSTMAN测试: JAVA代码: package com.provy.guard.api; import java.util.HashMap; import java.util.Map ...

  6. gym 102059A 树链剖分后odt维护区间

    题意 一棵树 多次修改,每次修改一个点到根的所有边的颜色,并询问现在有哪些颜色染了恰好$m$条边 题解: 稍加思考可以知道,从某个点到根节点的颜色数,均摊复杂度很低,因此,可以考虑珂朵莉树维护重链剖分 ...

  7. Java中的String、StringBuilder以及StringBuffer

    https://www.cnblogs.com/dolphin0520/p/3778589.html

  8. #10038.A Horrible Poem

    #10038.A Horrible Poem 题目传送门 思路解析 既然这道题目在hash板块里,那么自然就可以想到用hash做这道题目. 首先我们可以用hash数组存储字符串的前缀的hash值. 因 ...

  9. 2小程序canvas使用,及一些坑,以及自己的一些小总结

    自己做了一个小程序,主要用于给头像加图标的那种,和qq似的,主要用canvas做的, 第一回用,掉了很多坑,所以今天总结一下自己所做的,如果大家有不理解的地方,欢迎提问:如果帮到大家的话,帮忙点个啥的 ...

  10. 一丶HTML介绍

    import socket def main(): sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) sock.bind(('local ...