题目:有一根27厘米的细木杆,在第3厘米、7厘米、11厘米、17厘米、23厘米这五个位置上各有一只蚂蚁。木杆很细,不能同时通过一只蚂蚁。开 始时,蚂蚁的头朝左还是朝右是任意的,它们只会朝前走或调头,但不会后退。当任意两只蚂蚁碰头时,两只蚂蚁会同时调头朝反方向走。假设蚂蚁们每秒钟可以走 一厘米的距离。编写程序,求所有蚂蚁都离开木杆的最小时间和最大时间。
模拟每秒钟5只蚂蚁的情况。在生成Ant对象时确定蚂蚁的运行方向和名字。代码如下:
public class Ant {
//蚂蚁的位置
private int position;
//爬行方向
private boolean front_flg;
//是否到达终点
private boolean isOver = false;
//蚂蚁的名字
private String antName;
public boolean isOver() {
if((position == 0)||(position == 27)){
isOver = true;
} else {
isOver = false;
}
return isOver;
}
public void setOver(boolean isOver) {
this.isOver = isOver;
}
public String getAntName() {
return antName;
}
public void setAntName(String antName) {
this.antName = antName;
}
public boolean isFront_flg() {
return front_flg;
}
public void setFront_flg(boolean front_flg) {
this.front_flg = front_flg;
}
public void setPosition(int position) {
this.position = position;
}
//构造方法
public Ant (int position,boolean flg,String antName){
this.position = position;
this.front_flg = flg;
this.antName = antName;
}
public void crawl(boolean front_flg){
//根据爬行方向判断position的加减
if(!(isOver())){
if (front_flg){
position = position + 1;
} else {
position = position - 1;
}
}
System.out.println(antName + " has arrived position : " + position);
}
public int getPosition() {
return position;
}
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Ant ant3 = new Ant (3,true,"ant3");
Ant ant7 = new Ant (7,true,"ant7");
Ant ant11 = new Ant (11,true,"ant11");
Ant ant17 = new Ant (17,false,"ant17");
Ant ant23 = new Ant (23,false,"ant23");
//记录爬行时间
int useTime = 1;
while(!(ant3.isOver()
&&ant7.isOver()
&&ant11.isOver()
&&ant17.isOver()
&&ant23.isOver())){
//如果两只蚂蚁相遇则调转爬行方向
if (ant3.getPosition()==ant7.getPosition()){
boolean temp;
temp = ant3.isFront_flg();
ant3.setFront_flg(ant7.isFront_flg());
ant7.setFront_flg(temp);
}
if (ant3.getPosition()==ant11.getPosition()){
boolean temp;
temp = ant3.isFront_flg();
ant3.setFront_flg(ant11.isFront_flg());
ant11.setFront_flg(temp);
}
if (ant3.getPosition()==ant17.getPosition()){
boolean temp;
temp = ant3.isFront_flg();
ant3.setFront_flg(ant17.isFront_flg());
ant17.setFront_flg(temp);
}
if (ant3.getPosition()==ant23.getPosition()){
boolean temp;
temp = ant3.isFront_flg();
ant3.setFront_flg(ant23.isFront_flg());
ant23.setFront_flg(temp);
}
if (ant7.getPosition()==ant11.getPosition()){
boolean temp;
temp = ant7.isFront_flg();
ant7.setFront_flg(ant11.isFront_flg());
ant11.setFront_flg(temp);
}
if (ant7.getPosition()==ant17.getPosition()){
boolean temp;
temp = ant7.isFront_flg();
ant7.setFront_flg(ant17.isFront_flg());
ant17.setFront_flg(temp);
}
if (ant7.getPosition()==ant23.getPosition()){
boolean temp;
temp = ant7.isFront_flg();
ant7.setFront_flg(ant23.isFront_flg());
ant23.setFront_flg(temp);
}
if (ant11.getPosition()==ant17.getPosition()){
boolean temp;
temp = ant11.isFront_flg();
ant11.setFront_flg(ant17.isFront_flg());
ant17.setFront_flg(temp);
}
if (ant11.getPosition()==ant23.getPosition()){
boolean temp;
temp = ant11.isFront_flg();
ant11.setFront_flg(ant23.isFront_flg());
ant23.setFront_flg(temp);
}
if (ant17.getPosition()==ant23.getPosition()){
boolean temp;
temp = ant17.isFront_flg();
ant17.setFront_flg(ant23.isFront_flg());
ant23.setFront_flg(temp);
}
//蚂蚁爬行
ant3.crawl(ant3.isFront_flg());
ant7.crawl(ant7.isFront_flg());
ant11.crawl(ant11.isFront_flg());
ant17.crawl(ant17.isFront_flg());
ant23.crawl(ant23.isFront_flg());
System.out.println("Use time is :" + useTime++);
System.out.println("================================");
}
}
}
分享到:
相关推荐
题目中提到的情况是:在一个27厘米长的细木杆上,在第3厘米、7厘米、11厘米、17厘米、23厘米这五个位置上各放置了一只蚂蚁。木杆非常细,以至于无法让两只蚂蚁同时通过。这些蚂蚁的方向(即头部朝向左侧还是右侧)是...
1. **定义对象**: 在此问题中,可以将每一只蚂蚁视为一个对象。每个蚂蚁对象应该包含以下属性: - 当前位置:表示蚂蚁所在的位置。 - 移动方向:表示蚂蚁当前的移动方向(向左或向右)。 - 移动速度:所有蚂蚁的...
3.1 蚂蚁路径选择:每只蚂蚁根据当前城市和目标城市之间的信息素浓度和距离进行概率选择下一个城市,使用马尔科夫决策过程进行决策。 3.2 信息素更新:每个迭代周期结束后,根据蚂蚁们走过的路径更新信息素,同时...
"VC版蚂蚁线"是一种在计算机图形学领域中常见的算法实现,主要应用于视觉效果的创建,比如在Windows操作系统中常见的进度条效果。这个算法的名字来源于其产生的效果:线条看起来像是一群蚂蚁在画出路径。在Delphi...
"蚂蚁回家小游戏源码"是一个基于编程的游戏项目,旨在教授初学者如何通过编程逻辑来解决寻路问题。这个游戏的核心机制是让玩家通过绘制路径来帮助蚂蚁安全地找到回家的路,随着游戏级别的提升,难度逐渐增加,出现更...
蚂蚁金服 SEE Conf 2018介绍了蚂蚁集团专门为开发者打造的一系列工具,旨在提供更加高效和场景化的研发体验。这些工具包括一个面向蚂蚁生态系统的场景化集成开发环境(IDE),名为云凤蝶IDE,以及为支付宝小程序提供...
【标题】"mayicms蚂蚁分类信息5.9 宝塔nginx 单城市伪静态规则"涉及的关键技术点主要是关于网站URL伪静态处理,主要针对mayicms蚂蚁分类信息系统5.9版本,并且是在宝塔面板环境中使用Nginx服务器进行配置。...
1. 物理问题建模:文章从一个物理问题出发,描述了三只蚂蚁在等边三角形的三个顶点上出发,以恒定速度向下一个顶点爬行,从而形成一个持续转动的正三角形。问题要求计算它们相遇的时间、地点、绕相遇点转动的圈数...
【蚂蚁金服NLP问题相似度计算比赛】是面向自然语言处理(NLP)领域的一场竞赛,旨在解决一个核心问题:如何有效地计算两个文本问题之间的相似度。在实际应用中,这一技术对于智能客服、问答系统、搜索引擎优化等多个...
5. **声音效果**:利用`83a9787d4cb6f3b7632b4ddfebf74367.wav`这样的音频文件,添加声音效果,增加游戏的沉浸感。 通过这个项目,孩子们不仅能掌握编程的基本语法,还能培养解决问题的能力,激发对科技的兴趣。...
除了理论知识,该课程还提供了配套的文档和可能包含的实战项目,让学员能够在实际操作中巩固所学,提升解决实际问题的能力。通过学习【蚂蚁课堂二期】,无论是初级开发者还是有经验的技术人员,都将对分布式微服务有...
【旅行商问题与蚂蚁算法简介】 旅行商问题(Traveling Salesman Problem,TSP)是图论中的一个经典问题,其目标是寻找访问n个城市的最短路径,且每个城市只访问一次,最后返回起点。这是一个典型的组合优化问题,...
5. **算法设计**:解决蚂蚁离开木杆的最小时间(最短解)和最大时间(最长解)问题,需要考虑蚂蚁的初始位置、移动方向以及相遇后的转向策略。当两只蚂蚁相遇时,它们会同时改变方向,这种行为会影响最小和最大时间...
面对消费金融和支付领域的监管趋严,蚂蚁金服实施TechFin战略,减弱金融风险敞口,转而强调科技输出。在境内,聚焦“BASIC”五大领域(Blockchain区块链、AI人工智能、Security安全、IoT物联网、Cloud computing...
5. **注意问题**:启用伪静态后,确保所有内部链接都使用新的伪静态格式,否则可能导致404错误。同时,更新后的URL需要重新提交给搜索引擎,以便更新索引。 总的来说,mayicms蚂蚁分类信息5.8、5.9版本的伪静态规则...
【蚂蚁5.7信息网站源码】是一款专用于构建信息类网站的应用程序,其核心是基于编程语言和框架编写的可执行代码,旨在提供高效、稳定的信息发布与管理平台。这款源码经过了实际测试,确保了其在运行时的稳定性和功能...
原生js操作:驼峰格式和下划线格式互转,json字符串转换……五道题,带答案
于是,审计者转而考虑利用.htaccess文件进行Getshell。由于先前的图片上传功能,可以尝试将图片作为PHP文件解析,以此绕过WAF。审计者可能需要构造一个能够触发PHP解释器的.htaccess文件,并确保其执行预期的命令。 ...
5. **信息素更新**:根据蚂蚁的适应度更新路径上的信息素浓度,高适应度的路径信息素增加,低适应度的路径信息素减少。 6. **选择操作**:根据更新后的信息素浓度和路径长度,蚂蚁选择下一步的动作。 7. **迭代...
5. **小蚂蚁内网穿透.exe**:这是主执行文件,是整个软件的核心部分,负责实现内网穿透的功能。可能包含了NAT穿越、TCP/UDP代理、SSL加密通信等关键算法。 综上所述,"小蚂蚁内网穿透pc.zip"提供了一个能够在个人...