`
sing100star
  • 浏览: 28572 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

有关蚂蚁的笔试题目

 
阅读更多

前几天,我参加某公司的笔试,遇到如下题目

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

 当时急急忙忙写了一下,写得不是很完整,现在重新写下,和大家分享

import java.util.*;
public class MaYi
{
	public final static int FORWARD = 1;//向前走
	public final static int BACKWARD = -1;//向后走
	public int location;//位置
	public int direction;//方向
	
	public MaYi()
	{
		this.location =0;
		this.direction =FORWARD;
	}
	public MaYi(int location ,int direction)
	{
		this.location = location;
		this.direction = direction;
	}
	/**
          * 蚂蚁移动
	  */
	public  void walk()
	{
		location += direction;
	}
	/**
          * 蚂蚁掉转方向
	  */
	public void turn()
	{
		if(direction == FORWARD) direction = BACKWARD;
		else direction = FORWARD;
	}
	/**
          *两只蚂蚁是否碰头
          */
	public boolean isNear(MaYi m)
	{	if(m ==null) return false;
		int result = this.location - m.location;
		if(result ==1 || result== -1) return true;
		else return false;
	}
	/**
          *蚂蚁是否离开
          */
	public boolean isLeave()
	{
		if(location<1 || location >27) return true;
		else return false;
	}

	public static  void run(List<MaYi> list)
	{	//总的次数
		int count = 0;
		
		//循环,直到所有蚂蚁都离开
		while(!list.isEmpty())
		{
			MaYi first =null;
			MaYi second = null;
			for(int i = 0; i<list.size();i++)
			{
				first = list.get(i);

				//如果蚂蚁是最后一只,则它的前面没有任何蚂蚁
				//如果不是最后一只,则它的前面有蚂蚁
				//参考系为蚂蚁的前进方向
				if(first.direction == FORWARD)				{
					if(i+1 ==list.size()) second = null; 
					else second = list.get(i+1);
				}
				else if(first.direction == BACKWARD)
				{
					if( i== 0 ) second =null;
					else second = list.get(i-1);
				}
					
				//如果两支蚂蚁碰头,则调转方向
				if(first.isNear(second)) 
				{
					first.turn(); 
					second.turn();
				}

				//前进
				first.walk();

				//如果蚂蚁走到了尽头
				if(first.isLeave()) list.remove(first);
			}
			count++;//计算次数

		}
		System.out.println("  移动时间为:"+count);
		System.out.println();
	}
	
	public static void main(String[] args)
	{
		int first ,second,third,fourth,fifth;
		List<MaYi> list = null;
		for(int a=0;a<2;a++)
			for(int b=0;b<2;b++)
				for(int c=0;c<2;c++)
					for(int d=0;d<2;d++)
						for(int e=0;e<2;e++)
						{
							if(a ==0) first =1;
							else first = -1;
							if(b ==0) second =1;
							else second = -1;
							if(c ==0) third =1;
							else third = -1;
							if(d ==0) fourth =1;
							else fourth = -1;
							if(e ==0) fifth =1;
							else fifth = -1;
							
							list= new LinkedList<MaYi>();
								list.add(new MaYi(3,first));
								list.add(new MaYi(7,second));
								list.add(new MaYi(11,third));
								list.add(new MaYi(17,fourth));
								list.add(new MaYi(23,fifth));
							System.out.printf("第1蚂蚁,位置3,方向%d\n",first);
							System.out.printf("第2蚂蚁,位置7,方向%d\n",second);
							System.out.printf("第3蚂蚁,位置11,方向%d\n",third);
							System.out.printf("第4蚂蚁,位置17,方向%d\n",fourth);
							System.out.printf("第5蚂蚁,位置23,方向%d\n",fifth);
							MaYi.run(list);
						}

			
		
	
	
	}
}

 

结果如下:

第1蚂蚁,位置3,方向1
第2蚂蚁,位置7,方向1
第3蚂蚁,位置11,方向1
第4蚂蚁,位置17,方向1
第5蚂蚁,位置23,方向1
移动时间为:25

第1蚂蚁,位置3,方向1
第2蚂蚁,位置7,方向1
第3蚂蚁,位置11,方向1
第4蚂蚁,位置17,方向1
第5蚂蚁,位置23,方向-1
移动时间为:24

第1蚂蚁,位置3,方向1
第2蚂蚁,位置7,方向1
第3蚂蚁,位置11,方向1
第4蚂蚁,位置17,方向-1
第5蚂蚁,位置23,方向1
移动时间为:24

第1蚂蚁,位置3,方向1
第2蚂蚁,位置7,方向1
第3蚂蚁,位置11,方向1
第4蚂蚁,位置17,方向-1
第5蚂蚁,位置23,方向-1
移动时间为:24

第1蚂蚁,位置3,方向1
第2蚂蚁,位置7,方向1
第3蚂蚁,位置11,方向-1
第4蚂蚁,位置17,方向1
第5蚂蚁,位置23,方向1
移动时间为:24

第1蚂蚁,位置3,方向1
第2蚂蚁,位置7,方向1
第3蚂蚁,位置11,方向-1
第4蚂蚁,位置17,方向1
第5蚂蚁,位置23,方向-1
移动时间为:24

第1蚂蚁,位置3,方向1
第2蚂蚁,位置7,方向1
第3蚂蚁,位置11,方向-1
第4蚂蚁,位置17,方向-1
第5蚂蚁,位置23,方向1
移动时间为:22

第1蚂蚁,位置3,方向1
第2蚂蚁,位置7,方向1
第3蚂蚁,位置11,方向-1
第4蚂蚁,位置17,方向-1
第5蚂蚁,位置23,方向-1
移动时间为:24

第1蚂蚁,位置3,方向1
第2蚂蚁,位置7,方向-1
第3蚂蚁,位置11,方向1
第4蚂蚁,位置17,方向1
第5蚂蚁,位置23,方向1
移动时间为:24

第1蚂蚁,位置3,方向1
第2蚂蚁,位置7,方向-1
第3蚂蚁,位置11,方向1
第4蚂蚁,位置17,方向1
第5蚂蚁,位置23,方向-1
移动时间为:24

第1蚂蚁,位置3,方向1
第2蚂蚁,位置7,方向-1
第3蚂蚁,位置11,方向1
第4蚂蚁,位置17,方向-1
第5蚂蚁,位置23,方向1
移动时间为:22

第1蚂蚁,位置3,方向1
第2蚂蚁,位置7,方向-1
第3蚂蚁,位置11,方向1
第4蚂蚁,位置17,方向-1
第5蚂蚁,位置23,方向-1
移动时间为:24

第1蚂蚁,位置3,方向1
第2蚂蚁,位置7,方向-1
第3蚂蚁,位置11,方向-1
第4蚂蚁,位置17,方向1
第5蚂蚁,位置23,方向1
移动时间为:22

第1蚂蚁,位置3,方向1
第2蚂蚁,位置7,方向-1
第3蚂蚁,位置11,方向-1
第4蚂蚁,位置17,方向1
第5蚂蚁,位置23,方向-1
移动时间为:24

第1蚂蚁,位置3,方向1
第2蚂蚁,位置7,方向-1
第3蚂蚁,位置11,方向-1
第4蚂蚁,位置17,方向-1
第5蚂蚁,位置23,方向1
移动时间为:20

第1蚂蚁,位置3,方向1
第2蚂蚁,位置7,方向-1
第3蚂蚁,位置11,方向-1
第4蚂蚁,位置17,方向-1
第5蚂蚁,位置23,方向-1
移动时间为:24

第1蚂蚁,位置3,方向-1
第2蚂蚁,位置7,方向1
第3蚂蚁,位置11,方向1
第4蚂蚁,位置17,方向1
第5蚂蚁,位置23,方向1
移动时间为:22

第1蚂蚁,位置3,方向-1
第2蚂蚁,位置7,方向1
第3蚂蚁,位置11,方向1
第4蚂蚁,位置17,方向1
第5蚂蚁,位置23,方向-1
移动时间为:22

第1蚂蚁,位置3,方向-1
第2蚂蚁,位置7,方向1
第3蚂蚁,位置11,方向1
第4蚂蚁,位置17,方向-1
第5蚂蚁,位置23,方向1
移动时间为:22

第1蚂蚁,位置3,方向-1
第2蚂蚁,位置7,方向1
第3蚂蚁,位置11,方向1
第4蚂蚁,位置17,方向-1
第5蚂蚁,位置23,方向-1
移动时间为:24

第1蚂蚁,位置3,方向-1
第2蚂蚁,位置7,方向1
第3蚂蚁,位置11,方向-1
第4蚂蚁,位置17,方向1
第5蚂蚁,位置23,方向1
移动时间为:20

第1蚂蚁,位置3,方向-1
第2蚂蚁,位置7,方向1
第3蚂蚁,位置11,方向-1
第4蚂蚁,位置17,方向1
第5蚂蚁,位置23,方向-1
移动时间为:24

第1蚂蚁,位置3,方向-1
第2蚂蚁,位置7,方向1
第3蚂蚁,位置11,方向-1
第4蚂蚁,位置17,方向-1
第5蚂蚁,位置23,方向1
移动时间为:18

第1蚂蚁,位置3,方向-1
第2蚂蚁,位置7,方向1
第3蚂蚁,位置11,方向-1
第4蚂蚁,位置17,方向-1
第5蚂蚁,位置23,方向-1
移动时间为:24

第1蚂蚁,位置3,方向-1
第2蚂蚁,位置7,方向-1
第3蚂蚁,位置11,方向1
第4蚂蚁,位置17,方向1
第5蚂蚁,位置23,方向1
移动时间为:18

第1蚂蚁,位置3,方向-1
第2蚂蚁,位置7,方向-1
第3蚂蚁,位置11,方向1
第4蚂蚁,位置17,方向1
第5蚂蚁,位置23,方向-1
移动时间为:24

第1蚂蚁,位置3,方向-1
第2蚂蚁,位置7,方向-1
第3蚂蚁,位置11,方向1
第4蚂蚁,位置17,方向-1
第5蚂蚁,位置23,方向1
移动时间为:18

第1蚂蚁,位置3,方向-1
第2蚂蚁,位置7,方向-1
第3蚂蚁,位置11,方向1
第4蚂蚁,位置17,方向-1
第5蚂蚁,位置23,方向-1
移动时间为:24

第1蚂蚁,位置3,方向-1
第2蚂蚁,位置7,方向-1
第3蚂蚁,位置11,方向-1
第4蚂蚁,位置17,方向1
第5蚂蚁,位置23,方向1
移动时间为:12


第1蚂蚁,位置3,方向-1
第2蚂蚁,位置7,方向-1
第3蚂蚁,位置11,方向-1
第4蚂蚁,位置17,方向1
第5蚂蚁,位置23,方向-1
移动时间为:24

第1蚂蚁,位置3,方向-1
第2蚂蚁,位置7,方向-1
第3蚂蚁,位置11,方向-1
第4蚂蚁,位置17,方向-1
第5蚂蚁,位置23,方向1
移动时间为:18

第1蚂蚁,位置3,方向-1
第2蚂蚁,位置7,方向-1
第3蚂蚁,位置11,方向-1
第4蚂蚁,位置17,方向-1
第5蚂蚁,位置23,方向-1
移动时间为:24

 


0
0
分享到:
评论
1 楼 playfish 2009-10-28  
5重for循环。。。比较囧一点。。。

我觉得可以用01表示方向,5重for循环就可以简单改成2进制的表示法,00000到11111,就是for(<32),一个for循环就够了

00000 = 0
00001 = 2^0
00010 = 2^1
00011 = 2^1+2^0

相关推荐

    网易的游戏笔试题目,列了一些网易游戏的笔试题目

    网易游戏笔试题目解析 本资源摘要信息将对网易游戏笔试题目进行详细解析,涵盖算法、程序设计、数据结构等多方面的知识点。 问题1:蚂蚁掉头问题 本题目要求解决的是蚂蚁掉头问题,即 N 只蚂蚁放在一个长管中移动...

    百度技术研发笔试题目

    ### 百度技术研发笔试题目解析:蚂蚁行走问题 #### 题目背景与目标 本题目来源于百度的技术研发笔试,旨在考察应聘者对于算法设计、数据结构应用以及编程能力的理解和掌握程度。题目以五只蚂蚁在一个细长的木杆上...

    蚂蚁金服上机题目和答案.zip

    《蚂蚁金服上机题目与解答》 在IT行业中,面试是评估候选者技术能力的重要环节,特别是对于大型科技公司如蚂蚁金服来说,其面试流程通常包括技术面试、算法测试以及上机编程等环节。这个名为“蚂蚁金服上机题目和...

    蚂蚁金服社招java笔试题目-coding-interview-study-guide:此存储库包含我为准备编码面试而收集的笔记

    蚂蚁金服社招java笔试题目编码面试学习指南 该存储库包含我为准备编码面试而收集的笔记。 这些笔记基于流行的书籍:和。 第 1 章:数组和字符串 笔记哈希表:一种将键映射到值以实现高效查找的数据结构。 ArrayLists...

    阿里巴巴笔试面试大全

    整理了一下阿里巴巴往届笔试面试题,希望对大家有帮助: 来源:阿里巴巴笔试面试圈&gt;&gt; 1、史上最全Java面试266题:算法+缓存+TCP+JVM+搜索+分布式+数据库 ...9、2016校招阿里巴巴C++工程师笔试题目

    西安交大龙山软件笔试题目.doc

    ### 西安交大龙山软件笔试题目解析 #### 数据库查询优化问题 **题目描述:** 一家税务公司在每月月底需要向客户出具税务情况报告。在这个过程中,需要用到13个查询语句和一个存储过程来获取所需数据。这种方式不仅...

    百度技术笔试题 百度公司的题目有点难

    该题目是百度公司技术笔试中的一道编程题,主要考察的是问题解决能力和逻辑思维能力,尤其是对算法的理解和实现。题目描述了有五只蚂蚁分别位于木杆的特定位置,蚂蚁只能朝前走或者调头,当它们相遇时会同时改变方向...

    蚂蚁金服-算法笔试题.pdf

    通过这些知识点,可以推断出这道笔试题可能是蚂蚁金服在选拔算法工程师时的题目,旨在考察应聘者对字符串操作的熟练程度以及递归思维的掌握情况。对于应聘者而言,要解决这类问题,需要具备良好的编程基础和算法分析...

    2020阿里巴巴-反洗钱专员(测试题).rar

    2020阿里巴巴-反洗钱专员(测试题)

    百度程序笔试题+答案

    1. **问题建模**:题目描述了一个典型的同步问题,即多线程(在这里是多蚂蚁)在有限空间(木杆)内的移动问题。蚂蚁在特定位置相遇时会改变方向,最终目标是让所有蚂蚁离开木杆。这个问题可以转化为一个状态机模型...

    百度笔试题

    1. **问题建模**:题目描述了一个典型的多线程并发问题,将蚂蚁行走的过程类比为线程同步。每只蚂蚁代表一个线程,它们在木杆上的位置代表线程的状态,蚂蚁的行走方向代表线程执行的方向。 2. **算法设计**: - **...

    蚂蚁金服机试题分享-附件资源

    蚂蚁金服机试题分享-附件资源

    百度历年笔试试题汇总

    【百度历年笔试试题汇总】是一份集合了百度公司历年技术类笔试题目的资源,涵盖了算法、数据结构等多个核心IT领域。这些题目旨在测试应聘者的编程能力、逻辑思维以及对计算机科学基础知识的理解。 1. **数据库通知...

    500强笔试思维逻辑题

    "500强笔试思维逻辑题" 这组题目涵盖了逻辑思维、数学、推理和智慧等多个方面,旨在考察考生的逻辑思维能力、分析能力和解决问题的能力。本次我们将对每道题进行详细的分析和解释。 【1】假设有一个池塘,里面有...

    ant-explore:蚂蚁金服笔试

    模块说明com.ace.explore.ant.lock:题目一,自旋锁com.ace.explore.ant.statistics:题目二,java代码、注释统计com.ace.explore.ant.collection:题目三,queue&stackcom.ace.explore.ant.streaming:选做题,入口...

    百度历年笔试面试150题

    ### 百度历年笔试面试150题知识点详解 #### 1. C语言实现字符串倒序函数 **知识点概述:** 本题考察的是基础的字符串操作能力,要求使用C语言编写一个函数`revert`来实现字符串的原地倒序。 **实现思路:** 1. **...

    \百度计算机专业招聘面试题及答案

    在百度的技术研发笔试中,出现了一道与蚂蚁移动相关的题目。题目描述了在一个27厘米长的细木杆上,分别在第3厘米、7厘米、11厘米、17厘米、23厘米这五个位置上放置了五只蚂蚁。这些蚂蚁只能向前走或调头,并且在相遇...

    互联网大厂历年笔试面试题150道

    3. **算法与模拟**:蚂蚁行走问题是一个典型的逻辑和算法问题,需要编写程序来模拟蚂蚁的行为,计算最少和最多的时间。这涉及到条件判断、循环和基本的数据结构。 4. **数组操作**:将数组中的奇数移动到左边,偶数...

    unix 编程资料 面试题

    5. **百度技术研发笔试题解析**:此题目的核心是模拟蚂蚁行走并解决相遇问题。蚂蚁只能在整数厘米的位置相遇,每次移动1厘米,相遇时会调头。程序设计涉及数据结构(如数组)和算法(如遍历、状态转移)。 6. **...

    百度历年笔试面试150题.docx

    下面将逐一解析这些题目所涵盖的Java面试知识点。 1. **C语言实现字符串倒序**:这道题虽然不是Java,但它涉及到字符串操作,这是Java程序员应该理解的基础。在Java中,可以使用StringBuilder或StringBuffer类的...

Global site tag (gtag.js) - Google Analytics