【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程序设计入门--消息管理 ... 
随机推荐
- 【codeforces 983E】NN country
			Description In the NN country, there are n cities, numbered from 1 to n, and n−1 roads, connecting t ... 
- 清北学堂学习总结day2
			今天是钟皓曦大佬讲课,先来膜一波 %%%%% •数论 数论是这次培训的一个重点,那么什么是数论呢? 数论是研究整数性质的东西,所以理论上day2不会涉及小数QwQ (切入正题) •整除性: 设a, ... 
- 第十三节,OPenCV学习(二)图像的简单几何变换
			图像的简单几何变换 几何变换不改变图像的像素值,只是在图像平面上进行像素的重新安排 适当的几何变换可以最大程度地消除由于成像角度.透视关系乃至镜头自身原因所造成的几何失真所产生的的负面影响. 一.图像 ... 
- git知识总结-1.git基础之git reference
			1.前言 Git版本管理的内容,是一系列由40bytes SHA-1字符串所代表patch,而Git References,则是对这些字符串的引用(也可以理解为别名).为什么需要别名呢?因为这些字符串 ... 
- springboot动态多数据源
			参考文章:https://www.cnblogs.com/hehehaha/p/6147096.html 前言 目标是springboot工程支持多个MySQL数据源,在代码层面上,同一个SQL(Ma ... 
- 以iphone作为热点时ios程序中的UDP广播地址
			iPhone 开启热点后,会启用一个 172.20.10.0/28 的子网, 也就是最多15个ip地址,自己的地址是172.20.10.1, 广播地址是 172.20.10.15 ,不是传统的255. ... 
- MySQL 的安装与使用(一)
			一.Windows 上安装 MySQL 1.Windows 上安装 MySQL 相对来说会较为简单,地那就链接 https://cdn.mysql.com//Downloads/MySQL-8.0/m ... 
- SP283 NAPTIME - Naptime
			SP283 NAPTIME - Naptime 题意: 在某个星球上,一天由N小时构成.我们称0-1点为第一个小时,1-2点为第二个小时,以此类推.在第i个小时睡觉能恢复Ui点体力.在这座星球上住着一 ... 
- 一丶Http协议
			一 HTTP概述 HTTP(hypertext transport protocol),即超文本传输协议.这个协议详细规定了浏览器和万维网服务器之间互相通信的规则. HTTP就是一个通信规则,通信规则 ... 
- Unity中各种格式计时器
			问题背景: 在开发游戏过程中,很多地方需要倒计时,但是各种地方要的倒计时格式不同,倒计时都会写,在这里不详细介绍,写的目的就是为了记录一下,方便复用(为了在开发过程中不为了小问题浪费不必要脑细胞) 1 ... 
