百度面试题的java实现

简介: 本文为原创,如需转载,请注明作者和出处,谢谢!     有一根27厘米的细木杆,在第3厘米、7厘米、11厘米、17厘米、23厘米这五个位置上各有一只蚂蚁。
本文为原创,如需转载,请注明作者和出处,谢谢!

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

java实现代码

public   class  test_ant
{
    
private   int [] ants  =   new   int [ 5 ];
    
//  1:左 2:右
     private   int  enumDirection[][]  =   new   int [ 32 ][ 5 ];
    
private   void  initDirection()
    {
        
for  ( int  i  =   16 , column  =   0 ; i  >   0 ; i  =  i  /   2 , column ++ )
        {
            
int  n  =   1 ;
            
for  ( int  j  =   0 ; j  <   32 ; j ++ )
            {
                
if ((j  /  i)  %   2   ==   0 )
                    enumDirection[j][column] 
=   1 ;
                
else
                    enumDirection[j][column] 
=   2 ;
            }
        }
    }
    
private   boolean  checkAnts()
    {
        
for  ( int  i  =   0 ; i  <   5 ; i ++ )
        {
            
if  (ants[i]  >   0   &&  ants[i]  <   28 )
                
return   true ;
        }
        
return   false ;
    }
    
private   void  changeDirection( int  row,  int  col)
    {
        
if  (enumDirection[row][col]  ==   1 )
            enumDirection[row][col] 
=   2 ;
        
else
            enumDirection[row][col] 
=   1 ;
    }
    
public   void  antClimb()
    {
        initDirection();
        
for  ( int  n  =   0 ; n  <   32 ; n ++ )
        {
            
int  seconds  =   0 ;
            ants[
0 =   3 ;
            ants[
1 =   7 ;
            ants[
2 =   11 ;
            ants[
3 =   17 ;
            ants[
4 =   23 ;
            
while  (checkAnts())
            {
                seconds
++ ;
                
for  ( int  i  =   0 ; i  <  ants.length; i ++ )
                {
                    
if  (i  <  ants.length  -   1 )
                    {
                        
//  蚂蚁相遇
                         if  ((ants[i]  ==  ants[i  +   1 ])
                                        
&&  ((enumDirection[n][i]  +  enumDirection[n][i  +   1 ])  ==   3 ))
                        {
                            changeDirection(n, i);
                            changeDirection(n, i 
+   1 );
                        }
                    }
                    
if  (enumDirection[n][i]  ==   1 )
                        ants[i]
-- ;
                    
else
                        ants[i]
++ ;
                }
            }
            
for  ( int  j  =   0 ; j  <   5 ; j ++ )
                System.out.print(enumDirection[n][j]);
            System.out.println(
"" );
            System.out.println(seconds);
        }
    }
    
public   static   void  main(String[] args)
    {
        
new  test_ant().antClimb();
    }
}


其中ants数组保存了5只蚂蚁当前在竿上的位置
enumDirection枚举了所有的32种初始化方向,1代表向左,2代表向右

最短11秒, 最大25秒

运行结果

11111
23
11112
17
11112
23
11122
11
11112
23
11122
17
11122
23
11222
17
11112
23
11122
21
11122
23
11222
21
11122
23
11222
21
11222
23
12222
21
11112
25
11122
25
11122
25
11222
25
11122
25
11222
25
11222
25
12222
25
11122
25
11222
25
11222
25
12222
25
11222
25
12222
25
12222
25
22222
25




国内最棒的Google Android技术社区(eoeandroid),欢迎访问!

《银河系列原创教程》发布

《Java Web开发速学宝典》出版,欢迎定购

目录
相关文章
|
11月前
|
缓存 Java 关系型数据库
2025 年最新华为 Java 面试题及答案,全方位打造面试宝典
Java面试高频考点与实践指南(150字摘要) 本文系统梳理了Java面试核心考点,包括Java基础(数据类型、面向对象特性、常用类使用)、并发编程(线程机制、锁原理、并发容器)、JVM(内存模型、GC算法、类加载机制)、Spring框架(IoC/AOP、Bean生命周期、事务管理)、数据库(MySQL引擎、事务隔离、索引优化)及分布式(CAP理论、ID生成、Redis缓存)。同时提供华为级实战代码,涵盖Spring Cloud Alibaba微服务、Sentinel限流、Seata分布式事务,以及完整的D
551 1
|
11月前
|
存储 安全 Java
常见 JAVA 集合面试题整理 自用版持续更新
这是一份详尽的Java集合面试题总结,涵盖ArrayList与LinkedList、HashMap与HashTable、HashSet与TreeSet的区别,以及ConcurrentHashMap的实现原理。内容从底层数据结构、性能特点到应用场景逐一剖析,并提供代码示例便于理解。此外,还介绍了如何遍历HashMap和HashTable。无论是初学者还是进阶开发者,都能从中受益。代码资源可从[链接](https://pan.quark.cn/s/14fcf913bae6)获取。
417 3
|
8月前
|
算法 Java
50道java集合面试题
50道 java 集合面试题
|
10月前
|
缓存 Java API
Java 面试实操指南与最新技术结合的实战攻略
本指南涵盖Java 17+新特性、Spring Boot 3微服务、响应式编程、容器化部署与数据缓存实操,结合代码案例解析高频面试技术点,助你掌握最新Java技术栈,提升实战能力,轻松应对Java中高级岗位面试。
627 0
|
10月前
|
Java 数据库连接 数据库
Java 相关知识点总结含基础语法进阶技巧及面试重点知识
本文全面总结了Java核心知识点,涵盖基础语法、面向对象、集合框架、并发编程、网络编程及主流框架如Spring生态、MyBatis等,结合JVM原理与性能优化技巧,并通过一个学生信息管理系统的实战案例,帮助你快速掌握Java开发技能,适合Java学习与面试准备。
432 2
Java 相关知识点总结含基础语法进阶技巧及面试重点知识
|
11月前
|
存储 安全 Java
2025 最新史上最全 Java 面试题独家整理带详细答案及解析
本文从Java基础、面向对象、多线程与并发等方面详细解析常见面试题及答案,并结合实际应用帮助理解。内容涵盖基本数据类型、自动装箱拆箱、String类区别,面向对象三大特性(封装、继承、多态),线程创建与安全问题解决方法,以及集合框架如ArrayList与LinkedList的对比和HashMap工作原理。适合准备面试或深入学习Java的开发者参考。附代码获取链接:[点此下载](https://pan.quark.cn/s/14fcf913bae6)。
5790 50
|
8月前
|
算法 Java
50道java基础面试题
50道java基础面试题
|
11月前
|
算法 架构师 Java
Java 开发岗及 java 架构师百度校招历年经典面试题汇总
以下是百度校招Java岗位面试题精选摘要(150字): Java开发岗重点关注集合类、并发和系统设计。HashMap线程安全可通过Collections.synchronizedMap()或ConcurrentHashMap实现,后者采用分段锁提升并发性能。负载均衡算法包括轮询、加权轮询和最少连接数,一致性哈希可均匀分布请求。Redis持久化有RDB(快照恢复快)和AOF(日志更安全)两种方式。架构师岗涉及JMM内存模型、happens-before原则和无锁数据结构(基于CAS)。
284 5
|
11月前
|
NoSQL Java 微服务
2025 年最新 Java 面试从基础到微服务实战指南全解析
《Java面试实战指南:高并发与微服务架构解析》 本文针对Java开发者提供2025版面试技术要点,涵盖高并发电商系统设计、微服务架构实现及性能优化方案。核心内容包括:1)基于Spring Cloud和云原生技术的系统架构设计;2)JWT认证、Seata分布式事务等核心模块代码实现;3)数据库查询优化与高并发处理方案,响应时间从500ms优化至80ms;4)微服务调用可靠性保障方案。文章通过实战案例展现Java最新技术栈(Java 17/Spring Boot 3.2)的应用.
904 9