【C语言编程练习】新娘与新郎
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语言编程练习】新娘与新郎的更多相关文章
- C语言编程实现Linux命令——who
C语言编程实现Linux命令--who 实践分析过程 who命令是查询当前登录的每个用户,它的输出包括用户名.终端类型.登录日期及远程主机,在Linux系统中输入who命令输出如下: 我们先man一下 ...
- 个人c语言编程风格总结
总结一下我个人的编程风格及这样做的原因吧,其实是为了给实验室写一个统一的C语言编程规范才写的.首先声明,我下面提到的编程规范,是自己给自己定的,不是c语言里面规定的. 一件事情,做成和做好中间可能隔了 ...
- Linux下C语言编程实现spwd函数
Linux下C语言编程实现spwd函数 介绍 spwd函数 功能:显示当前目录路径 实现:通过编译执行该代码,可在终端中输出当前路径 代码实现 代码链接 代码托管链接:spwd.c 所需结构体.函数. ...
- 混合语言编程:启用CLR(公共语言运行时编译)让C#调用C++
前言 关于混合C#和C++的编程方式,本人之前写过一篇博客(参见混合语言编程:C#使用原生的Directx和OpenGL),在之前的博客中,介绍了在C#的Winform和WPF下使用原生的Direct ...
- Linux基础与Linux下C语言编程基础
Linux基础 1 Linux命令 如果使用GUI,Linux和Windows没有什么区别.Linux学习应用的一个特点是通过命令行进行使用. 登录Linux后,我们就可以在#或$符后面去输入命令,有 ...
- LINUX下C语言编程基础
实验二 Linux下C语言编程基础 一.实验目的 1. 熟悉Linux系统下的开发环境 2. 熟悉vi的基本操作 3. 熟悉gcc编译器的基本原理 4. 熟练使用gcc编译器的常用选项 5 .熟练使用 ...
- 第二章 C语言编程实践
上章回顾 宏定义特点和注意细节 条件编译特点和主要用处 文件包含的路径查询规则 C语言扩展宏定义的用法 第二章 第二章 C语言编程实践 C语言编程实践 预习检查 异或的运算符是什么 宏定义最主要的特点 ...
- 华为C语言编程规范
DKBA华为技术有限公司内部技术规范DKBA 2826-2011.5C语言编程规范2011年5月9日发布 2011年5月9日实施华为技术有限公司Huawei Technologies Co., Ltd ...
- 9 本免费的 Python 语言编程书籍(转载)
9 本免费的 Python 语言编程书籍 原文地址:http://linuxtoy.org/archives/9-free-python-books.html 2010-03-03 Toy Poste ...
- linux 操作系统下c语言编程入门
2)Linux程序设计入门--进程介绍 3)Linux程序设计入门--文件操作 4)Linux程序设计入门--时间概念 5)Linux程序设计入门--信号处理 6)Linux程序设计入门--消息管理 ...
随机推荐
- Oracle DB Day01(SQL)
--时间为什么不是现在呢? --设置时区和显示时间 ALTER DATABASE SET TIME_ZONE='+08:00' select to_char(current_timestamp at ...
- 我常用的sublime快捷键整理
由于很多人用sublime作为编辑器,我想我平时学习的时候也可以用sublime写demo,顺便熟悉一下sublime的使用方法.慢慢发现sublime中快捷键能节省很多时间,很方便,但是同时快捷键很 ...
- 第31月第25天 xcode debug 限制uitextfiled输入
1.xcode debug 了解了每个设置的意思,个人觉得对于一个普通的app来说可以这样配置这些设置: Generate Debug Symbols:DEBUG和RELEASE下均设为YES(和Xc ...
- 20164305 徐广皓 Exp1+ 逆向进阶
实验内容 Task1 (5-10分) 自己编写一个64位shellcode.参考shellcode指导. 自己编写一个有漏洞的64位C程序,功能类似我们实验1中的样例pwn1.使用自己编写的shell ...
- Tree Cutting POJ - 2378 (树形DP)
题目链接:POJ - 2378 题目大意:给你n个点,然后问你这n个点中 ,去除哪些点能够使得剩下的图中最大的连通块中点的个数不超过n/2. 具体思路:第一遍dfs记录每一个点代表的子树大小,第二遍d ...
- VS 测试printf 多参数 输出 i++ 和++i 结果
代码如截图: 总结: printf 多参数中有运算时 是从右到左执行的: i++ 和 ++i 优先级是大于 赋值 =运算的: i++ 和++i 是平级的: i++ 先用在算,++i 先算在用: 从右往 ...
- sql报错注入:extractvalue、updatexml报错原理
报错注入:extractvalue.updatexml报错原理 MySQL 5.1.5版本中添加了对XML文档进行查询和修改的两个函数:extractvalue.updatexml 名称 描述 Ext ...
- Theano.tensor.round函数学习,同时解决输出Elemwise{xxx,no_inplace}.0的问题
1. 出现Elemwise{xxx,no_inplace}.0 这是因为没有定义theano.function所致,参考下面错误示范: y = np.random.normal(size=(2,2 ...
- python中的多线程和多进程编程
注意:多线程和多线程编程是不同的!!! 第一点:一个进程相当于一个要执行的程序,它会开启一个主线程,多线程的话就会再开启多个子线程:而多进程的话就是一个进程同时在多个核上进行: 第二点:多线程是一种并 ...
- 【easy】101. Symmetric Tree
判断一棵二叉树是否对称 /** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left ...