【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程序设计入门--消息管理 ...
随机推荐
- element ui change 传递带自定义参数
@change="((val)=>{changeStatus(val, index)})" https://www.cnblogs.com/mmzuo-798/p/10438 ...
- Echarts——一个简单的嵌套饼图
</!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title& ...
- C# NPOI 操作Excel 案例
1.加入NPOI 程序集,使用nuget添加程序集 2.引用NPOI程序集 private IWorkbook ExportExcel(PrintQuotationOrderViewModel mod ...
- MFC常用宏
MFC调试宏 TRACE() 其形式与函数printf()的参数一样,功能是在调试运行时把表达式的值输出到Output调试窗口. Debug版有效 ASSERT()——断言宏, 表达式为真,则程 ...
- vuecli3 项目添加配置文件以及使用@映射、代理
在根目录下新建 vue.config.js 1.vue.config.js中配置路径别名方法 // vue.config.js module.exports = { configureWebpack: ...
- P5303 [GXOI/GZOI2019]逼死强迫症
题目地址:P5303 [GXOI/GZOI2019]逼死强迫症 这里是官方题解 初步分析 从题目和数据范围很容易看出来这是一个递推 + 矩阵快速幂,那么主要问题在于递推的过程. 满足条件的答案一定是以 ...
- butterknife-gradle-plugin插件
在android library项目里由于R类中变量不再是final类型而无法使用butterknife,为了解决此问题,Jakewharton大神引入了butterknife-gradle-plug ...
- pyspider
Linux系统我使用CentOS.对于pycurl安装问题比较好解决,只需要先安装对应的开发包即可.执行如下命令: yum install python-devel curl-devel 分别安装py ...
- echarts-饼状图默认选中高亮
1.首页需要设置legend legend: { data: ["积极", "负面"], selectedMode: false, show: false } ...
- python之地基(二)
上一个阶段呢,我们已经学习了python的数据的类型.今天呢,我们来学习各种各样的运算符. 一.基本运算符 a = 10 b = 20 运算符号 描述 示例 + 加——两个对象相加 a+b 输出 ...