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;
                }
            }
        }
  • 相关阅读:
    php数据类型
    php输出语句
    php学习知识点框架
    php变量
    php语法
    php 的开发工具
    搭建php环境的几种方法
    redis 的单机安装
    三、其他主机安装zabbix-agent加入到zabbix
    内核参数优化
  • 原文地址:https://www.cnblogs.com/selfchange/p/12736529.html
Copyright © 2011-2022 走看看