热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

蚂蚁爬木杆问题的算法思路

题目如下:有一根27厘米的细木杆,在第3厘米、7厘米、11厘米、17厘米、23厘米这五个位置上各有一只蚂蚁。木杆很细,不能同时通过两只蚂蚁。开始时,蚂蚁的头朝左还是朝右是任意的,它们只会朝前走或调头,但不会后退。当任意两只蚂蚁碰头时,两只蚂蚁会同时调头朝反方向走。假设蚂蚁们每秒钟可以走一厘米的距离。编写程序,求所有蚂蚁

题目如下:

  1. 有一根27厘米的细木杆,在第3厘米、7厘米、11厘米、17厘米、23厘米这五个位置上各有一只蚂蚁。
  2. 木杆很细,不能同时通过两只蚂蚁。
  3. 开始时,蚂蚁的头朝左还是朝右是任意的,它们只会朝前走或调头,但不会后退。
  4. 当任意两只蚂蚁碰头时,两只蚂蚁会同时调头朝反方向走。
  5. 假设蚂蚁们每秒钟可以走一厘米的距离。

编写程序,求所有蚂蚁都离开木杆 的最小时间和最大时间。

来个形象的小图:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
    _       _        _                 _                 _
    e       f        a                 b                 g
                     →                 ←

说这个趣味题是一个编程题,其实还不如说是个脑筋急转弯,刚看这个题的时候确实是一头雾水,5 只小蚂蚁,应该怎么考虑呢?写程序该从哪个点入手呢?!貌似写程序不是很容易啊~!

不过仔细地考虑一下就会发现:当 a 蚂蚁和 b 蚂蚁相碰的时候,发生了什么呢?“两只蚂蚁会同时调头朝反方向走”,而且“假设蚂蚁们每秒钟可以走一厘米的距离”,当两只蚂蚁都掉头以后,我们把 a 蚂蚁看成 b 蚂蚁,把 b 蚂蚁看成 a 蚂蚁,若不考虑它们的名字a,b,其实这和两只蚂蚁“擦肩而过”有什么区别呢?也就是说,蚂蚁的碰撞根本不会影响“宏观”上五只蚂蚁的运动情况。

最短的时间:根据示意图,求最短时间的话,e, f, a 三只蚂蚁都向左走,b, g 两只都向右走,进而只需看 a 和 b,a 和 b 哪个距离各自的端点更近呢?a 距离左端为 11,b 距离右端为 10,那么最短时间当然取决与 a 蚂蚁,也就是 11/1 = 11 秒。

最长的时间:根据示意图,最长时间取决于“谁”呢?当然是 e 蚂蚁,没有“谁”比它距离右端更远,所以最长时间即为:(27 - 3) = 24 秒。

C语言编程实现如下:

#include   
#include   
#include   
using std::cout;  
using std::endl;  
#define SLEN 27  
int getL(int ad)  
{  
    return abs(SLEN-ad)>ad ? abs(SLEN-ad) : ad;  
};  
int getS(int ad)  
{  
    return SLEN-getL(ad);  
};  
int main(void)  
{  
    int ads[]={3,7,11,17,23};  
    int L=0,S=0; //L保存最长时间;S保存最短时间  
    for(int i=0;i<5;++i)  
    {  
        if (L												

本文地址:http://www.nowamagic.net/librarys/veda/detail/235,欢迎访问原出处。


推荐阅读
  • 程序员版情书:王思聪的编程式告白
    当程序员用代码表达爱意,会产生怎样的化学反应?一起来看看这封充满技术感的情书,网友笑称这才是真爱! ... [详细]
  • 本文详细介绍了C语言中的基本数据类型,包括整型、浮点型、字符型及其各自的子类型,并探讨了这些类型在不同编译环境下的表现。 ... [详细]
  • 俗话说得好,“工欲善其事,必先利其器”。这句话不仅强调了工具的重要性,也提醒我们在任何项目开始前,准备合适的工具至关重要。本文将介绍几款C语言编程中常用的工具,帮助初学者更好地选择适合自己学习和工作的编程环境。 ... [详细]
  • 本文深入探讨了 Linux 系统下进程的内存布局,包括栈、堆、BSS 段、数据段和代码段的特性与功能,并进一步分析了 C++ 程序中的内存管理特点。 ... [详细]
  • 1、字符型常量字符型常量指单个字符,是用一对单引号及其所括起来的字符表示。例如:‘A’、‘a’、‘0’、’$‘等都是字符型常量。C语言的字符使用的就是 ... [详细]
  • NFS(Network File System)即网络文件系统,是一种分布式文件系统协议,主要用于Unix和类Unix系统之间的文件共享。本文详细介绍NFS的配置文件/etc/exports和相关服务配置,帮助读者理解如何在Linux环境中配置NFS客户端。 ... [详细]
  • C语言实现推箱子游戏的完整代码
    本文详细介绍了如何使用C语言在Linux环境下实现一个简单的推箱子游戏,包括游戏的基本规则、地图设计及代码实现。适合C语言初学者学习。 ... [详细]
  • LCUI 2.1.0 版本现已推出,这是一个用 C 语言编写的图形用户界面开发库,适合创建轻量级的桌面应用程序。此次更新包括多项修复和功能增强,并正式宣布将启动 Android 支持的开发计划。 ... [详细]
  • 解决CentOS 7.5中无法通过man命令查询C语言库函数的问题
    本文描述了在CentOS 7.5操作系统上,使用man命令查询C语言库函数时遇到的问题,并提供了详细的解决方案。 ... [详细]
  • 本文探讨了在C语言编程中,如何有效避免多文件项目中的重定义问题,通过合理使用预处理器指令和extern关键字,确保代码的健壮性和可维护性。 ... [详细]
  • 目录简介torch.bmm()语法作用举例参考结语简介Hello!非常感谢您阅读海轰的文章,倘若文中有错误的地方,欢迎您指出~ ... [详细]
  • 本文提供了一个C语言程序示例,用于计算一个班级中3名学生在4门课程上的平均成绩和班级总平均成绩。代码可在Visual C++或Visual Studio等环境中直接运行,包含详细的注释以帮助理解。 ... [详细]
  • PHP 中 preg_match 函数的 isU 修饰符详解
    本文详细解析 PHP 中 preg_match 函数中 isU 修饰符的具体含义及其应用场景,帮助开发者更好地理解和使用正则表达式。 ... [详细]
  • 本文介绍了Java语言开发的远程教学系统,包括源代码、MySQL数据库配置以及相关文档,适用于计算机专业的毕业设计。系统支持远程调试,采用B/S架构,适合现代教育需求。 ... [详细]
  • 本文详细介绍了Linux操作系统中的cp和scp命令,包括它们的基本使用方法、常见选项以及如何通过scp命令安全地在不同主机之间传输文件。 ... [详细]
author-avatar
liuyidii
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有