|
该用户从未签到
|
! _8 Q1 a7 M( }* ?9 j/ K5 h6 c
import java.util.Scanner;
: G! P/ s* [$ |3 v+ O0 ~/**
3 I. ~2 t% ]) `/ T*使用数组实现约瑟夫环问题
% m. q& y! c; p/ t6 z# ~9 Q! |*由m个人围成一个首尾相连的圈报数。' D% X0 W+ h) @6 u- I$ @
*从第一个人开始,从1开始报数,报到n的人出圈,
# O$ d! Y( B$ q8 J. f4 x*剩下的人继续从1开始报数,直到所有的人都出圈为止。
# R1 E. {: a' {1 f9 \/ [*对于给定的m和n,求出所有人的出圈顺序.% f2 ^4 t( W6 S) J a( f; i
*/, U. B3 `$ ^ \* @
public class RingTest{8 o, E/ y$ A, {# Z
public static void main(String[] args){ a; |1 p* p+ `0 x3 E
System.out.println("程序说明如下:");/ E% r9 h: R- e( F4 o
System.out.println("由m个人围成一个首尾相连的圈报数。从第一个人开始,从1开始报数,报到n的人出圈,剩下的人继续从1开始报数,直到所有的人都出圈为止。对于给定的m和n,求出所有人的出圈顺序.");
0 D. N. v6 m2 Z$ {# H2 f //提示输入总人数
& x# [2 p! q: @7 m6 X% v$ [ System.out.println("请输入做这个游戏的总人数:");
) P0 N% b8 {$ T- f2 _2 H' \ Scanner sca=new Scanner(System.in);3 D% A. `6 O" P) q7 f. l2 e) w
int m=sca.nextInt();% o, l4 F1 h8 u& A' K4 ^7 t
//提示输入要出圈的数值8 I" T s+ |. n; x) C( ~, `
System.out.println("请输入要出圈的数值:"); : x3 D- Z R1 A! \3 P0 N# A/ ~
int n=sca.nextInt();
# A- F" T6 Z; N, q6 s8 D' u System.out.println("按出圈的次序输出序号:"); * D% A# \' J: {; x& ]. y) R6 I& S
//创建有m个值的数组) W6 N! t# r" Z
int[] a=new int[m];6 t0 R) W. i3 K! e& X$ B
//初始长度,以后出圈一个,长度就减一
* [) V; M$ X% M3 X3 x- S- M int len=m;' s, j5 J8 w- }/ N9 N
//给数组赋值: `8 r+ D4 s/ g, l
for(int i=0;i<a.length;i++)/ P" t; Q8 m$ ]# V/ _/ n) c
a[i]=i+1;
' S& v. T: l7 U //i为元素下表,j代表当前要报的数( _& n# n/ {6 i) J
int i=0;; s) y2 s; `: }. s& J
int j=1;
( J- s+ \( R: z: ]/ h: | while(len>0){
% j! E- C( H' V; d8 a if(a[i%m]>0){
; l, Y2 x t% `9 z# K if(j%n==0){//找到要出圈的人,并把圈中人数减一* ]2 ]& d7 y6 V8 s
System.out.print(a[i%m]+" ");
8 z+ b# }: F( N8 r7 K( o% f! v4 I a[i%m]=-1;
: a8 o6 T6 A4 A `; N j=1;
4 U7 O5 {9 A( z' H5 {3 ?0 b# w i++;$ R/ J. q) M4 o u
len--;7 @) I* }' V" P5 u5 R, r
}else{
; B2 u d5 ]" H9 c3 @2 ? i++;
8 A! W/ n4 i) j: @/ t j++;. e- v( d2 O z) k! O" G
}9 Y/ f* C' U+ J5 @
}else{//遇到空位了,就跳到下一位,但j不加一,也就是这个位置没有报数
% m& K' D, t/ r4 @! h7 T i++;
' h2 k; O4 D' ]7 w- W, O }
$ f9 F) w1 z+ \. c+ x9 B }6 P1 S K; k" x" g; D: R
}
" x) [6 B8 t; |* t+ T} p+ v, u8 i8 l% R; ~ O
9 ], \5 g) r6 B w: W
' ?2 s7 o5 ^" ^% Q' u
|
|