zoukankan      html  css  js  c++  java
  • 标号1-n的n个人首尾相接,1到3报数,报到3的退出,求最后一个人的标号

    问题分析

    循环问题, 递归方式处理,或者for循环处理。

    1. 退出条件, 只剩下一个人: 退出人数 = n - 1

    变化的数据

    报数, 退出人数

    public static int getLastPersonNumber(int n) {
            if (n < 1) {
                return -1;
            }
            //初始化人数列表
            int[] persons = new int[n + 1];
            for (int i = 1; i <= n; i++) {
                persons[i] = i;
            }
            //报数记录
            int report = 0;
            //退出人数记录
            int outCount = 0;
            //for循环报数
            for (int i = 1; ; i++) {
                if (i > n) { // i 既是下标, 也是编号
                    i = 1;
                }
                if (persons[i] != 0) { //退出编号清0
                    report++;
                }
    
                if (report == 3 && outCount != n - 1) { //报数为3了, 重置报数, 退出, 退出人数自增
                    report = 0;
                    persons[i] = 0;
                    outCount++;
                } else if (outCount == n - 1) { //退出n-1个人, 只剩一个人
                    return i;
                }
            }
        }
  • 相关阅读:
    Haproxy基于ACL做访问控制
    K8s之Prometheus监控
    kubernetes之PV及PVC案例
    K8s常见示例
    K8s之Web服务
    Ansible 部署k8s
    K8s之网络通信
    创建资源对象实例
    kubeadm搭建K8s集群
    Go基础之函数递归实现汉诺塔
  • 原文地址:https://www.cnblogs.com/selfchange/p/12736529.html
Copyright © 2011-2022 走看看