算法 囚犯幸存者

题目

主类

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;
}
相关推荐
覆东流3 小时前
7.Java数组
java·开发语言·后端
m0_719084113 小时前
限流和获取请求ip的方法
java
lzhdim4 小时前
提高 SQL 语句执行速度的方法
java·开发语言·数据库·sql·oracle
深漂的华哥4 小时前
Ruoyi-Plus前后端分离场景下,数据加密传输
java·spring boot·后端·开源·maven·ruoyi
落魄大学生之流水线上谋生计6 小时前
Java锁全面指南:从基础概念到企业级应用
java·开发语言
爱学习的小白柏7 小时前
【AI问数技术】多Agent协同架构:查询规划/SQL生成/洞察分析/报告生成
java·网络·人工智能·windows·sql·架构·llama
码匠许师傅7 小时前
【C++ 面试真题】30. 聊聊 C++ 的互斥锁与读写锁
java·c++·面试
沙盘客7 小时前
AFSIM 示例解读(03)· 六自由度飞行仿真 six_dof(下):机场运作与弹道导弹投送
java·javascript·经验分享
CHANCE V8 小时前
集合排序和流排序
java
16月6日-晴8 小时前
Java面向对象进阶—多态
java·开发语言