算法 囚犯幸存者

题目

主类

java 复制代码
public static List<Prisoner> prisoners = new ArrayList<Prisoner>();
public static List<Prisoner> remainPrisoners = new ArrayList<Prisoner>();
public static Prisoner lastPrisoner = null;
java 复制代码
public static void main(String[] args) {

    Random random = new Random();
    // 循环100次 生成100个囚犯
    for (int i = 0; i < 100; i++) {
        // 生成随机数
        Long code = (long) random.nextInt(200) + 1;
        if (existCode(code)) {
            i--;
            continue;
        }
        Prisoner prisoner = new Prisoner(code,(long) i + 1);
        prisoners.add(prisoner);
    }

    System.out.println("囚犯初始站位:") ;
    prisoners.forEach(System.out::println);

    // 深拷贝
    remainPrisoners = new ArrayList<>(prisoners);

    // 开始枪毙囚犯
    while (remainPrisoners.size() > 1) {
        killPrisoner();
    }

    lastPrisoner = remainPrisoners.get(0);
    System.out.println("最后一个囚犯编号:" + lastPrisoner.getCode());
    System.out.println("最后一个囚犯站位:" + lastPrisoner.getFirstPlace() );

}
java 复制代码
public static boolean existCode(Long code) {
    // 判断囚犯编号是否存在 使用stream流
    return prisoners.stream().anyMatch(prisoner -> code.equals(prisoner.getCode()));
}
java 复制代码
// 枪毙囚犯(枪毙奇数位置的囚犯)
public static void killPrisoner() {
    for (int i = remainPrisoners.size(); i > 0 ; i--) {
        if (i % 2 != 0) {
            System.out.println(i);
            remainPrisoners.remove(i-1);
        }
    }
    System.out.println("剩余囚犯:");
    remainPrisoners.forEach(System.out::println);
}

囚犯类

java 复制代码
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Prisoner {
    private Long code;
    private Long firstPlace;
}
相关推荐
雨中飘荡的记忆1 小时前
财务对账系统设计与实现
java
0***h9421 小时前
使用 java -jar 命令启动 Spring Boot 应用时,指定特定的配置文件的几种实现方式
java·spring boot·jar
雨中飘荡的记忆1 小时前
布式事务详解:从理论到实践(RocketMQ + Seata)
java·rocketmq
i***48611 小时前
微服务生态组件之Spring Cloud LoadBalancer详解和源码分析
java·spring cloud·微服务
zzlyx991 小时前
用C#采用Avalonia+Mapsui在离线地图上插入图片画信号扩散图
java·开发语言·c#
Aevget1 小时前
MyEclipse全新发布v2025.2——AI + Java 24 +更快的调试
java·ide·人工智能·eclipse·myeclipse
一 乐2 小时前
购物|明星周边商城|基于springboot的明星周边商城系统设计与实现(源码+数据库+文档)
java·数据库·spring boot·后端·spring
笃行客从不躺平2 小时前
线程池监控是什么
java·开发语言
y1y1z2 小时前
Spring框架教程
java·后端·spring
曾经的三心草2 小时前
基于正倒排索引的Java文档搜索引擎3-实现Index类-实现搜索模块-实现DocSearcher类
java·python·搜索引擎