当前位置: 首页 > news >正文

C语言------一种思路解决实际问题

1.比赛名次问题

ABCDE参加比赛,那么每个人的名次都有5种可能,即1,2,3,4,5;

int main()
{int a = 0;int b = 0;int c = 0;int d = 0;int e = 0;for (a = 1; a <= 5; a++){for (b = 1; b <= 5; b++){for (c = 1; c <= 5; c++){for (d = 1; d <= 5; d++){for (e = 1; e <= 5; e++){if ((b == 2) + (a == 3) == 1&& (b == 2) + (e == 4) == 1&& (c == 1) + (d == 2) == 1&& (d == 3) && (c == 5) == 1&& (e == 4) && (a == 1) == 1){if (a * b * c * d * e == 120){printf("a=%d b=%d c=%d d=%d e=%d", a, b, c, d, e);}}}}}}}
}

这道题目的主要思想就是使用判断语句,真就是1,假就是0,每位选手只有一个人说的是对的,就是2个判断条件的和是1,使用逻辑与运算符,使得每个人的话都是一半对;

如果这样结束,我们会发现会出现名次相同的情况,所以要使得他们分别对应12345个名次,就要满足名次的乘积是120;

其实我们不难发现,如果这道题目真的使用传统方法解决,很难办,但是当我们使用假就是0,真就是1的时候,就可以很快的得到位序。

2.找凶手问题

这道题目与上一道题的思想类似,但是凶手只有一个人,我们可以依次假设ABCD是凶手,然后根据供词进行判断,如果符合3个真话,1个假话,就可以知道谁是凶手;

如果我们依然使用假就是0,真就是1,那么他们的和是3时,就找到凶手;

int main()
{char killer = 0;for (killer = 'a'; killer <= 'd'; killer++){if ((killer != 'a') + (killer == 'c') + (killer == 'd') + (killer != 'd') == 3){printf("%c", killer);break;}}return 0;
}

如上图所示,利用循环找到凶手之后,使用break终止循环。

http://www.lryc.cn/news/302334.html

相关文章:

  • 前端判断对象为空
  • DS:栈和队列的相互实现
  • Hack The Box-Office
  • android aidl进程间通信封装通用实现
  • FL Studio 21.2.3.4004 All Plugins Edition Win/Mac音乐软件
  • vivado RAM HDL Coding Guidelines
  • springboot/ssm甘肃旅游服务平台Java在线旅游规划管理系统
  • 第三百五十四回
  • 【Funny Game】 吃豆人
  • PyCharm - Run Debug 程序安全执行步骤
  • 作为一个程序员,最少要看过这几部电影吧?
  • 备战蓝桥杯 Day4
  • 用HTML和CSS打造跨年烟花秀视觉盛宴
  • SSH密钥认证登陆流程(Vscode连接到远程)
  • k8s进阶之路-pod探针:容器内的监控机制,检测应用是否存活
  • 2.1.1 摄像头
  • linux安装mysql8且初始化表名忽略大小写
  • Java-长字符串加密
  • 使用pytest单元测试框架执行单元测试
  • Flutter 中 DraggableScrollableSheet 的属性介绍与使用
  • 分库分表面试必背
  • 14个常见的Java课程设计/毕业设计合集(源码+文档)
  • 如何用 docker 部署程序?
  • 5G固定无线接入(FWA)
  • Unity ScreenPointToRay 获取到的坐标不准确
  • AJAXJSON入门篇
  • 代码随想录算法训练营29期|day54 任务以及具体安排
  • 文件操作相关工具类
  • Spring源码:手写SpringIOC
  • 【软件设计师】程序猿需掌握的技能——数据流图