有一根27厘米的细木杆在第3厘米、7厘米、11厘米、17厘米、23厘米这五个位置上各有一只蚂蚁。木杆很细不能同时通过一只蚂蚁。开始时蚂蚁的头朝左还是朝右是任意的它们只会朝前走或调头但不会后退。当任意两只蚂蚁碰头时两只蚂蚁会同时调头朝反方向走。假设蚂蚁们每秒钟可以走一厘米的距离。编写程序求所有蚂蚁都离开木杆的最小时间和最大时间。1. 创建C源代码文件 ant.cpp#includeiostream #includedeque using namespace std ; class AntInfo{ public: bool Orientation; //方向 int Position; //位置 }; dequeAntInfo AntDeque; //蚂蚁信息双头队列 const int Pos[5]{3,7,11,17,23}; //蚂蚁的初始位置 int Time[32]{0}; //共有32种情况存储每种情况的用时 int main(){ for(int i0; i32; i){ cout初始位置/方向: ; for(int j0; j5; j){ AntInfo Ant; Ant.PositionPos[j]; //初始位置赋值 Ant.Orientation(bool)(i(1j)); //初始方向赋值 AntDeque.push_front(Ant); // 5只蚂蚁信息依次压栈入双向列队 //打印5只蚂蚁初始位置和方向 coutPos[j]/; if(Ant.Orientation) cout右 ; else cout左 ; } while(!AntDeque.empty()){ Time[i]; //每一秒蚂蚁移动一厘米 dequeAntInfo::iterator Pointer; //指向deque容器的迭代器重载操作符同指针 for(PointerAntDeque.begin(); PointerAntDeque.end(); Pointer){ if(Pointer-Orientation) Pointer-Position; //向右移动位置递增 else Pointer-Position--; //向左移动位置递减 } //相邻蚂蚁位置相等表示相遇,相遇两蚂蚁均改变方向 for(PointerAntDeque.begin(); PointerAntDeque.end()-1; Pointer){ if(Pointer-Position(Pointer1)-Position){ Pointer-Orientation!Pointer-Orientation; //左蚂蚁变向 (Pointer1)-Orientation!(Pointer1)-Orientation; //右蚂蚁变向 } } //判断队列首尾蚂蚁是否到达端点剔除已经到达两端的蚂蚁 if(0AntDeque.back().Position) AntDeque.pop_back(); //到达0点出栈 if(27AntDeque.front().Position) AntDeque.pop_front(); //到达27点出栈 } //打印此种情况用时 cout 用时Time[i]秒endl; } //筛选出最大最小时间并打印 int maxTimeTime[0]; int minTimeTime[0]; for(int i 1; i32; i){ if(Time[i]maxTime) maxTimeTime[i]; if(Time[i]minTime) minTimeTime[i]; } cout\n最大用时maxTime秒endl最小用时minTime秒endl; return 0; //main返回 }2. Linux系统环境编译和运行2.1 如果安装gcc编译器在命令行终端运行编译链接命令g -O3 -Wall ant.cpp -o ant.elf2.2 如果安装clang编译器在命令行终端运行编译链接命令clang -O3 -Wall ant.cpp -o ant.elf2.3 命令行终端输入如下命令运行程序./ant.elf2.4 结果xyzxyz:/media/xyz/disk_e/Linux/posix_unix_api$ g -O3 -Wall ant.cpp -o ant.elf xyzxyz:/media/xyz/disk_e/Linux/posix_unix_api$ ./ant.elf 输出的每种结果如下: 初始方向左 左 左 左 左 用时23秒 初始方向右 左 左 左 左 用时24秒 初始方向左 右 左 左 左 用时23秒 初始方向右 右 左 左 左 用时24秒 初始方向左 左 右 左 左 用时23秒 初始方向右 左 右 左 左 用时24秒 初始方向左 右 右 左 左 用时23秒 初始方向右 右 右 左 左 用时24秒 初始方向左 左 左 右 左 用时23秒 初始方向右 左 左 右 左 用时24秒 初始方向左 右 左 右 左 用时23秒 初始方向右 右 左 右 左 用时24秒 初始方向左 左 右 右 左 用时23秒 初始方向右 左 右 右 左 用时24秒 初始方向左 右 右 右 左 用时23秒 初始方向右 右 右 右 左 用时24秒 初始方向左 左 左 左 右 用时17秒 初始方向右 左 左 左 右 用时24秒 初始方向左 右 左 左 右 用时20秒 初始方向右 右 左 左 右 用时24秒 初始方向左 左 右 左 右 用时17秒 初始方向右 左 右 左 右 用时24秒 初始方向左 右 右 左 右 用时20秒 初始方向右 右 右 左 右 用时24秒 初始方向左 左 左 右 右 用时11秒 初始方向右 左 左 右 右 用时24秒 初始方向左 右 左 右 右 用时20秒 初始方向右 右 左 右 右 用时24秒 初始方向左 左 右 右 右 用时16秒 初始方向右 左 右 右 右 用时24秒 初始方向左 右 右 右 右 用时20秒 初始方向右 右 右 右 右 用时24秒 最大用时24秒 最小用时11秒3. 总结3.1. 5只蚂蚁的方向排列组合共有32中情况方向的最简赋值方法依次取出0~31的所有整数的二进制位 Ant.Orientation(bool)(i (1j)) 3.2. 每过一秒判断两两相邻的蚂蚁位置是否相等确定蚂蚁是否相遇相遇的两只蚂蚁均改变方向3.3. 用双向队列deque首尾出栈的方法剔除掉到达木杆两端的蚂蚁直到双向队列为空记录的时间数是目标结果。
企业数字化 ERP 产品动态
相关推荐
解密Unblink:当监控摄像头学会“对话“时,你该如何提问? 解密Unblink:当监控摄像头学会"对话"时,你该如何提问? 【免费下载链接】unblink Camera monitoring with VLM 项目地址: https://gitcode.com/gh_mirrors/unb/unblink
想象一下这样的场景:深夜,你突然… · 2026/9/24 13:28:09
普通人0基础学习AI的路线图 今天一篇文章讲清楚:1、普通人怎么学习AI?
2、推荐一个很牛的AI学习网站,纯免费!学完,你的副业又增加了一个哦,先看图↓:先说结论:
普通人学习“AI能干什么、AI工具、智能体”这三个… · 2026/9/24 19:12:27
ML工程实战:从模型部署到生产稳定性的七层落地体系 1. 这不是“调参侠”培训手册,而是一份给真实世界的ML工程师的生存地图 “ML Engineering is Not What You Think — ML Jobs Explained”——光看标题,你可能以为这又是一篇在技术博客里打转的术语辨析文,讲讲“机器学习工程师”和“数据科学… · 2026/9/18 7:10:12
Java工资管理系统课设:数据库设计与事务实战 简介:本资源是一份面向高校数据库课程设计的Java企业级工资管理系统完整实践文档,适用于计算机、软件工程等专业本科生完成《数据库原理及应用》课程设计任务。文档系统覆盖需求分析、E-R建模、数据库逻辑设计(含员工、基本工资、津贴三张核心… · 2026/9/25 14:51:30
Mac访达缩略图不显示?从缓存到QuickLook的完整修复指南 开篇先讲一个八成Mac用户都撞见过的场景:今天打开访达准备找图片,结果一排排文件图标全变成了白色占位符,图片缩略图、视频预览、PDF封面一个都不显示。你以为是文件坏了,点开内容却一切正常,再按一下空格想快速预览&a… · 2026/9/25 14:51:30
云栖大会第一印象:机器智能的经济学 机器智能是一个全新的物种,它正在把“思考”变成一种可以规模化供给的商品。作者 | 高 飞今天2026 年云栖大会第一天的日程才结束,从阿里巴巴集团 CEO 吴泳铭的演讲出发,对主论坛写一下第一印象解读。虽然这是一个毫无疑问的技术峰会&#… · 2026/9/25 14:51:11
DeskcommCRM实操拆解:从客户管理到工单协作与数据看板 1. 先搞清楚 DeskcommCRM 到底解决什么问题1.1 从名字拆解看产品定位第一次看到 DeskcommCRM 这个名字,很多人会下意识问一句:这不又是一个 CRM 吗?市面上叫得上名的客户管理系统少说几十款,它凭什么值得单独聊?我个人… · 2026/9/25 14:51:05
云栖观察:从云端到车端,SSD正在适应不同的AI任务 作者:王聪彬一块SSD,为什么要做到256TB?放到今天的AI数据中心里,这个问题并不奇怪。模型训练要吞吐大量数据,到了推理和Agent阶段,实时检索、缓存和上下文调用又增加了更多读写任务。在汽车里,情… · 2026/9/25 14:51:05
创维E900V22D刷机全攻略:S905L3SB芯片兼容性解析与救砖实战 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 1:00:31
MQTT协议原理与Broker服务器搭建实战:从Mosquitto到EMQX /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 1:00:37