5264
- 收藏
- 点赞
- 分享
- 举报
面试题目:蚂蚁问题
题目:
有一根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厘米这五个位置
上各有一只蚂蚁。木杆很细,不能同时通过一只蚂蚁。开始时,蚂蚁的头朝左还是朝右是
任意的,它们只会朝前走或调头,但不会后退。当任意两只蚂蚁碰头时,两只蚂蚁会同时
调头朝反方向走。假设蚂蚁们每秒钟可以走一厘米的距离。编写程序,求所有蚂蚁都离开
木杆的最小时间和最大时间。
模拟每秒钟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("================================");
}
}
}
我来回答
回答0个
时间排序
认可量排序
暂无数据
或将文件直接拖到这里
悬赏:
E币
网盘
* 网盘链接:
* 提取码:
悬赏:
E币
Markdown 语法
- 加粗**内容**
- 斜体*内容*
- 删除线~~内容~~
- 引用> 引用内容
- 代码`代码`
- 代码块```编程语言↵代码```
- 链接[链接标题](url)
- 无序列表- 内容
- 有序列表1. 内容
- 缩进内容
- 图片![alt](url)
相关问答
-
12008-08-02 00:51:41
-
22008-11-09 10:08:54
-
2008-08-02 00:45:28
-
2008-07-12 19:10:50
-
122008-09-05 20:15:43
-
2008-09-20 15:00:55
-
2008-07-19 13:45:06
-
2008-09-20 14:59:37
-
2008-08-02 00:56:25
-
2008-09-20 15:03:27
-
2008-08-18 21:38:09
-
2008-08-18 21:40:43
-
2013-12-01 22:54:44
-
2013-11-20 18:55:19
-
02008-08-08 14:38:05
-
2008-11-09 10:03:10
-
2008-09-20 14:58:47
-
2015-05-19 15:23:02
-
12008-09-05 20:19:46
无更多相似问答 去提问
点击登录
-- 积分
-- E币
提问
—
收益
—
被采纳
—
我要提问
切换马甲
上一页
下一页
悬赏问答
-
5Hi3516CV610 如何使用SD卡升级固件
-
5cat /dev/logmpp 报错 <3>[ vi] [func]:vi_send_frame_node [line]:99 [info]:vi pic queue is full!
-
50如何获取vpss chn的图像修改后发送至vo
-
5FPGA通过Bt1120传YUV422数据过来,vi接收不到数据——3516dv500
-
50SS928 运行PQtools 拼接 推到设备里有一半画面会异常
-
53536AV100的sample_vdec输出到CVBS显示
-
10海思板子mpp怎么在vi阶段改变视频数据尺寸
-
10HI3559AV100 多摄像头同步模式
-
9海思ss928单路摄像头vio中加入opencv处理并显示
-
10EB-RV1126-BC-191板子运行自己编码的程序
举报反馈
举报类型
- 内容涉黄/赌/毒
- 内容侵权/抄袭
- 政治相关
- 涉嫌广告
- 侮辱谩骂
- 其他
详细说明
提醒
你的问题还没有最佳答案,是否结题,结题后将扣除20%的悬赏金
取消
确认
提醒
你的问题还没有最佳答案,是否结题,结题后将根据回答情况扣除相应悬赏金(1回答=1E币)
取消
确认