之前看有的朋友谈百度的一道面试试题-蚂蚁问题(有一根27厘米的细木杆,在第3厘米、7厘米、11厘米、17厘米、23厘米这五个位置上各有一只蚂蚁。木杆很细,不能同时通过一只蚂蚁。开始时,蚂蚁的头朝左还是朝右是任意的,它们只会朝前走或调头,但不会后退。当任意两只蚂蚁碰头时,两只蚂蚁会同时调头朝反方向走。假设蚂蚁们每秒钟可以走一厘米的距离。编写程序,求所有蚂蚁都离开木杆的最小时间和最大时间)。关于这道题目,网上给出了很多的解释,但从整体来看,基本都是用到了等价置换(等量代换)的思想。要求最小时间,即为“最不容易”先到达两端的蚂蚁以最短的时间到达,所以我们只需找到所有蚂蚁中间的一只(共奇数只蚂蚁)或两只(共偶数只蚂蚁)到达一端的最短时间。比较麻烦的是求最长时间,有人会觉得当有很多只蚂蚁时,中间的蚂蚁们相互碰撞的次数多些会增加时间,感觉上比较复杂,可如果我们用等量代换的思想来解释就比较容易。假设中间的任意两只相邻蚂蚁即将发生碰撞,如:A -> <-B,当A,B发生碰撞后,便有<-A B->。A,B反向相当于<-B A -> ,即二者继续向着原来的方向前进,对于任意相邻的发生碰撞的蚂蚁都适用,所以只需求最两端的两只蚂蚁距离两端的最远距离。由以上分析可知,如果出这样的问题,我们可以不用通过程序便能说出结果:5个点,中间蚂蚁的位置为11,即0-11-27,显然最小为11,最两端蚂蚁,0-3-27,最大为24,0-23-27,最大为23,所以最大为24。对于这个题,给出如下Java代码(随便写了几句,不符合面向对象思想)。
public class Ant {
public static void main(String[] args){
int length=27,points=5,min=0,max=0,temp_min=0,temp_max=0;
int[] pos={3,7,11,17,23};
for(int i: pos){
temp_min=i>length-i?length-i:i;
temp_max=i<length-i?length-i:i;
if(temp_min>min)
min=temp_min;
if(temp_max>max)
max=temp_max;
}
System.out.println("最短时间:"+min+" 最长时间:"+max);
}
}有了如上的想法,我们能做出判断,为什么还要写代码呢?其实这个问题出自Waterloo Local Contest Sep.19,2004 准确描述如下:
An army of ants walk on a horizontal pole of length l cm, each with a constant speed of 1 cm/s. When a walking ant reaches an end of the pole, it immediatelly falls off it. When two ants meet they turn back and start walking in opposite directions. We know the original positions of ants on the pole, unfortunately, we do not know the directions in which the ants are walking. Your task is to compute the earliest and the latest possible times needed for all ants to fall off the pole.
The first line of input contains one integer giving the number of cases that follow. The data for each case start with two integer numbers: the length of the pole (in cm) and n, the number of ants residing on the pole. These two numbers are followed by n integers giving the position of each ant on the pole as the distance measured from the left end of the pole, in no particular order. All input integers are not bigger than 1000000 and they are separated by whitespace.
For each case of input, output two numbers separated by a single space. The first number is the earliest possible time when all ants fall off the pole (if the directions of their walks are chosen appropriately) and the second number is the latest possible such time.
Sample Input
2
10 3
2 6 7
214 7
11 12 7 13 176 23 191
Sample Output
4 8
38 207
在这里给出相应的c++代码:
#include<iostream>
using namespace std;
int main()
{
int cases,l,n,min,max,temp_min,temp_max,pos;
cin>>cases;
while(cases--)
{
cin>>l>>n;
min=0;
max=0;
while(n--)
{
cin>>pos;
temp_min=pos>l-pos?l-pos:pos;
temp_max=pos<l-pos?l-pos:pos;
if(temp_min>min)
min=temp_min;
if(temp_max>max)
max=temp_max;
}
cout<<min<<' '<<max<<endl;
}
return 0;
}
分享到:
相关推荐
### 如何以Java编程解决趣味蚂蚁问题 #### 1. 问题背景与描述 趣味蚂蚁问题是一个在网络上流行的智力挑战题目。题目中提到的情况是:在一个27厘米长的细木杆上,在第3厘米、7厘米、11厘米、17厘米、23厘米这五个...
【蚂蚁问题 C++】是一个基于面向对象编程的实践项目,主要目标是模拟蚂蚁寻找食物的行为。在自然界中,蚂蚁通过释放信息素来通信,寻找最短路径到食物源。在这个项目中,我们将学习如何用C++语言来实现这一过程。 ...
蚂蚁爬杆问题 A.B.C三只蚂蚁不同速度在一个杆上爬行,求蚂蚁爬出杆的时间问题
《蚂蚁爬行问题的Java实现及其算法解析》 在计算机科学领域,模拟自然界的现象并从中学习解决问题的方法是一种常见的策略。蚂蚁爬行问题就是一个这样的例子,它源于对真实世界蚂蚁行为的观察,然后通过编程来模拟...
在现代社会,室内蚂蚁问题已成为许多家庭和商业场所的困扰。这份"创业计划书-室内蚂蚁种类及其防治方法"深入探讨了这一主题,旨在为解决这一问题提供创新的解决方案。创业计划书中可能涵盖了以下关键知识点: 1. **...
2. **城市环境中的蚂蚁问题** - 随着城市化进程,蚂蚁逐渐适应了城市环境,经常入侵室内,污染食物,破坏建筑物,传播疾病,影响人类生活质量。 3. **防治策略** - **物理防治**: - 湿布擦拭:发现蚂蚁活动时,...
5. **专业消杀**:如果蚂蚁问题严重,可以请专业的害虫防治公司进行处理。他们有专业的设备和化学品,能够更有效地根除蚁患。 6. **植物防蚁**:种植如薄荷、薰衣草等具有驱虫效果的植物,既能美化环境,也有助于防...
在本案例中,“蚂蚁爬杆问题”是一个典型的OOP应用场景,我们可以用C#语言来实现。下面我们将详细探讨这个问题以及如何用面向对象的方式去解决它。 首先,我们需要定义一个“蚂蚁”类(Ant),这个类至少包含两个...
- **模型识别**:通过类比正方体上的蚂蚁问题,利用“两点之间线段最短”的原理,将三维问题转化为二维平面问题,寻找最短路线。 - **模型提炼**:从立方体问题中抽象出一般规律,适用于不同形状的容器,如将圆柱...
长100厘米的细长直杆子上有n只蚂蚁。它们的头有的朝左,有的朝右。 每只蚂蚁都只能沿着杆子向前爬,速度是1厘米/秒。 当两只蚂蚁碰面时,它们会同时掉头往相反的方向爬行。 这些蚂蚁中,有1只蚂蚁感冒了。...
这个问题是关于算法设计和模拟的,具体涉及到蚂蚁在一根木棍上移动的场景。题目给出的是百度面试中的一道题目,要求解决所有蚂蚁都离开木棍的最小和最大时间问题。蚂蚁只能向前走或者调头,当两只蚂蚁相遇时,它们会...
蚂蚁爬杆自己写的,希望大神能够帮助我写代码的质量,有什么问题随便提出来,自己一定会改正的谢谢
一根长度为L厘米的木棍上有n只蚂蚁,每只蚂蚁要么朝左爬,要么朝右爬,速度为1厘米/秒。当两只蚂蚁相撞时,二者同时掉头(掉头时间忽略不计)。给出每只蚂蚁的初始位置和朝向,计算T秒之后每只蚂蚁的位置。 程序给出...
**蚂蚁算法(Ant Colony Optimization, ACO)是一种模拟生物系统中的蚂蚁行为来解决优化问题的算法,由Marco Dorigo于1992年提出。在这个案例中,它被应用于解决旅行商问题(Traveling Salesman Problem, TSP)。** ...
在“蚂蚁BMS保护板第一至第三版固件”中,我们可以看到该产品从初期到后续的改进过程,每一代固件都可能包含了对前代问题的修复和功能的升级。 其次,更新工具是连接用户和固件之间的桥梁。蚂蚁BMS保护板的更新工具...
但是,这种方式存在很多问题,如数据量小、分析周期长、学习成本高等。 农耕时代(简单工具) 2012 年,蚂蚁金服开始计划敏捷 BI 产品的开发,旨在解决数据分析的痛点。这个阶段,蚂蚁金服遇到了许多挑战,如数据...
在本文档中,标题和描述提及了一个特定的算法——蚂蚁算法(Ant Colony Optimization, ACO),以及它在解决多目标旅行商问题(Multi-Objective Traveling Salesman Problem, TSP)上的应用。由于文档部分内容被标记...
在这个场景中,我们关注的是"使用C++实现小蚂蚁爬行"的问题。这个问题的核心是通过编程语言模拟蚂蚁在一条线上的运动行为,包括它们的相遇和方向变化。让我们深入探讨这个主题。 首先,我们需要理解问题的基本模型...