• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录

wchenfeng

  • 博客园
  • 联系
  • 订阅
  • 管理

公告

View Post

Java初步试探“约瑟夫环”问题

N人围一圈并按顺时针方向从1到N编号,从第S个人开始进行1-M报数,报数到第M人,此人出圈,再从他下一个人重新开始从1-M报数,如此进行下去,每次报数到M的人就出圈,直到所有人都出圈为止。给出这N个人的出圈顺序。

 若将N设为13,S设为3,M设为5

package com;
import java.util.*;
public class sentence {
    public static void main(String[] args) {
        final int N = 13, S = 3, M = 5;//设有13个人,从第3个人开始1-5报数
        int i = S - 1, j, k = N, g = 1;
        int[] a = new int[N];
        for (int h = 1; h <= N; h++)
            a[h - 1] = h;//将第h人的编号存入下标为h-的数组元素中
        System.out.println("\n出圈顺序为:");
        do {
            i = i + (M -1);//计算出圈人的下标
            while (i >= k)//当数组下标i大于等于圈中的人数k时
                i -= k;//将数组的下标i减去圈中的人数k
            System.out.print(" " + a[i]);//输出出圈人的编号
            for (j = i; j < k - 1; j++)
                a[j] = a[j + 1];//a[i]出圈后,将后续人的编号前移
            k--;//圈中的人数k-1
            g++;//g为循环控制变量
        } while (g <= N);//共有N人,循环N次
    }
}

posted on 2022-04-12 20:02  王陈锋  阅读(43)  评论(0)    收藏  举报

刷新页面返回顶部
 
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3