逛贴吧偶遇一道很新颖的C语言编程题,想到自己的C语言荒废了很久,便决定花点时间解决一下练练手。

具体题目如下:

实验题目(4)【见实验教材实验五的题目6】:编写程序exp5_6.c,请判断花瓶是谁打碎的。教师花瓶碎了,班级只有四个小同学,老师询问小同学,已知是其中1人打碎的,还知道4人中每个人要么是诚实的,要么总是说谎的。

小同学回答老师的问题是:

甲说:“乙没有打碎,是丁打碎的。”

乙说:“我没有打碎,是丙打碎的。”

丙说:“甲没有打碎,是乙打碎的。”

丁说:“我没有打碎。”

根据四人回答判断谁打碎了花瓶。

**什么?书??我没有书啊?**硬着头皮写吧

#include

int a[4]={0,0,0,0};//数组a用来表示甲乙丙丁四个人的标志,若为1则表示是他打碎了花瓶

int b[4]={0,0,0,0};//数组b用来表示甲乙丙丁四个人陈述的命题的真否,1表示否命题

int check(int t[4])

{

//判断甲所陈述的命题

int flag=1; //FLAG标志判断是否运行以下程序

if(t[0]==1) //甲说谎

{

if(t[1]==1&&t[3]==0) //若甲说谎则乙说的是真话且丁说谎;以下同理

{

a[1]=1;

a[3]=0;

flag=0;

}

}

else{

if(t[2]==1&&t[3]==1)

{

a[1]=0;

a[3]=1;

flag=0;

}

}

if(flag){

return 0; //若该情况不可能满足,则返回主程序

}

flag=1;//判断乙说的话

if(t[1]==1){

if(t[0]==1&&t[2]==0){

a[1]=1;

a[2]=0;

flag=0;

}

}

else{

if(t[0]==0&&t[2]==1){

a[1]=0;

a[2]=1;

flag=0;

}

}

if(flag){

return 0;

}

flag=1;//判断丙说的话

if(t[2]==1){

if(t[1]==0&&t[0]==0){

a[0]=1;

a[1]=0;

flag=0;}

}

else{

if(t[0]==1&&t[1]==1){

a[0]=0;

a[1]=1;

flag=0;

}

}

if(flag){

return 0;

}

flag=1;//判断丁说的话

if(t[3]==1){

if(t[0]==0){

a[3]=1;

flag=0;

}

}

else{

if(t[0]==1){

a[3]=0;

flag=0;}

}

if(flag){

return 0;

}

return 1;//判断程序正确执行,返回标志1

}

int main()

{

for(int i=0;i<16;i++)

{

int m=3;

int n=i;

while(n)

{

b[m]=n%2;

n=n/2;

m--;

}

for(int k=0;k<4;k++)

{

printf("%d",b[k]);

} //将16种可能情况一一遍历

printf("\n");

int c=check(b);

if(c&&(a[0]+a[1]+a[2]+a[3])==1)//判断完毕且得到一个人打碎了花瓶

{

printf("it is ");

for(int t=0;t<4;t++)

{

printf("%d",a[t]);//输出标志数组

}

printf("\n");

}

}

return 0;

}

程序运行后结果如下

由此可以判断是乙打碎了花瓶

C语言新手,如有错误欢迎指正

程序还可进行优化,学业繁重,告辞。

C语言 编程判断花瓶是谁打碎的,【数组编程面试题】面试问题:C语言解决是谁… - 看准网...相关推荐

  1. C语言 编程判断花瓶是谁打碎的,C语言解决是谁打碎花瓶的问题

    逛贴吧偶遇一道很新颖的C语言编程题,想到自己的C语言荒废了很久,便决定花点时间解决一下练练手. 具体题目如下: 实验题目(4)[见实验教材实验五的题目6]:编写程序exp5_6.c,请判断花瓶是谁打碎 ...

  2. 快乐编程大本营【java语言训练班】第5课: java的数组编程

    快乐编程大本营[java语言训练班]第5课: java的数组编程 第1节. 声明数组变量 第2节. 创建数组对象 第3节. 访问数组元素 第4节. 修改数组元素 第5节. 多维数组 学习地址如下: h ...

  3. c语言怎么使用数组播放下一首音乐,【数组编程面试题】面试问题:c语言MP3播… - 看准网...

    #include #include #include #include //CString的头文件 #include//使用当前时钟做种子 #include #include #include #pr ...

  4. 求两数是否互质c语言程序,判断两个数a,b是否为互质数的程序,用C语言编写?...

    优质回答 回答者:福尔摩猪 两个数互质,就是说两个数的没有公共因子,即最大公约数是1 程序如下: #include int GCD(int x,int y)//最大公约数函数,欧几里德算法 { int ...

  5. 语言高精度算法阶乘_JavaScript中的算法(附10道面试常见算法题解决方法和思路)...

    https://juejin.im/post/6844903811505455118 Introduction 面试过程通常从最初的电话面试开始,然后是现场面试,检查编程技能和文化契合度.几乎毫无例外 ...

  6. 多线程面试题c Linux,【多线程Linux面试题】面试问题:小伙用C语言熬… - 看准网...

    记得聊天室可是大学的热门开发小项目啊,只要是老师布置的小组项目开发,那么其中肯定有聊天室,O(∩_∩)O哈哈哈~ 小编今天介绍的这个项目课程呢,就是教你开发一款聊天室,正在学习C语言的小伙伴一定不要错 ...

  7. 查找学生链表c语言,【查找链表面试题】面试问题:C语言实现学生… - 看准网...

    趁着放假无事,开始用C语言开发一些小的项目,巩固基础知识的同时学习新的知识. 学生成绩管理系统实现的功能有:成绩录入.学生成绩查询.删除.修改.通过文件保存等. 开发这样一个系统需要具备的知识:线性表 ...

  8. c语言 指针 字符串 回文 strcmp,【查找字符串面试题】面试问题:C语言指针题集… - 看准网...

    1. 若有说明:int a=2, *p=&a, *q=p;,则以下非法的赋值语句是(). A. p=q;           B. *p=*q;        C. a=*q;         ...

  9. 百度linux c面试题,【百度百度糯米算法百度LinuxC语言数据面试题】面试问题:百度笔试题… - 看准网...

    第一部分选择题: 有几道网络相关的题目,巨简单,比如第一题是TCP.RIP.IP.FTP中哪个协议是传输层的.......有一道linux的chown使用题目.其他的全是数据结构的题目!什么链,表,码 ...

最新文章

  1. SQL Server存储过程输入参数使用表值
  2. 静态内部类和非静态内部类区别汇总
  3. IT项目管理总结:第一章 项目管理概述
  4. 宏观经济学自我学习与总结
  5. 一起开心2020暑假训练第二周 图论(模板题)
  6. linux比较10个文件是否一致,Linux中文件管理--cmp--比较两个文件是否有差异
  7. 给Android工程师的Java后台学习建议
  8. LAMDA表达式学习
  9. 【Anychat】理解POCO
  10. Asp.Net中获取 字符串中中英字符的长度
  11. Basic knowledge about python
  12. C#莱姆达表达式的使用
  13. 【Github万星】50个有趣而又鲜为人知的 Python 特性
  14. 2021SC@SDUSC HBase(十三)项目代码分析——WAL写入
  15. java格式化XML文件
  16. 实时操作系统和非实时操作系统的区别
  17. stm32f103VCT6全新机器 做stm32开发板 原理图以及主要器件规格书
  18. 巴拉克·奥巴马总统就职演说
  19. c# IPAddress类
  20. C51 学习笔记03 | 8051单片机几大功能组成部件

热门文章

  1. The books which are worth reading for me
  2. 【Python】将文章变为软文的诗词风
  3. 王道考研-操作系统b站学习第一章
  4. 世界第一位半机械人出现
  5. 精益数据分析笔记--指标
  6. java sql超过32k_ibatis调用oracle的动态sql,sql大小不能超过32K
  7. MySQL Binlog 介绍
  8. 匿名社交:在安全和危险边缘摇摆
  9. Mybatis 拦截器原理
  10. 图片怎么转换成gif?