该用户从未签到
|
' P' K. @! L) B* K/ Aimport java.util.Scanner;
0 i" E! o, G1 e" g7 ^$ r$ b1 n/**
" Y4 Y6 I) X0 ^*使用数组实现约瑟夫环问题: z/ l) a$ P/ o6 H3 |, e
*由m个人围成一个首尾相连的圈报数。
' Q+ S4 A6 [4 x) y0 z8 H*从第一个人开始,从1开始报数,报到n的人出圈,; C/ h% \2 Y. C# R% c0 k9 ^
*剩下的人继续从1开始报数,直到所有的人都出圈为止。 e; q/ e0 G7 `
*对于给定的m和n,求出所有人的出圈顺序." s$ l/ k/ @ `; ?0 ~. i
*/
* b* r- J- R2 l8 Ipublic class RingTest{
) e: {& n+ a+ P$ x, M, L/ e public static void main(String[] args){/ {- p& G% o' k# Q" i
System.out.println("程序说明如下:");
' q( @# w: s- Y6 f: y System.out.println("由m个人围成一个首尾相连的圈报数。从第一个人开始,从1开始报数,报到n的人出圈,剩下的人继续从1开始报数,直到所有的人都出圈为止。对于给定的m和n,求出所有人的出圈顺序.");5 q" i P, e3 `! m( \! e
//提示输入总人数
1 q: q! s& m- q8 ^; J4 \4 L- [. E System.out.println("请输入做这个游戏的总人数:"); y* u- R+ X$ Z' i
Scanner sca=new Scanner(System.in);
) ]2 y6 L7 k7 t/ e int m=sca.nextInt();- r9 x( w3 `% w' W- I
//提示输入要出圈的数值, `* s& Z6 c5 I- D' b1 b$ Z
System.out.println("请输入要出圈的数值:"); # X# A4 B8 \, R O
int n=sca.nextInt();
' e9 ]. q$ \+ U$ x6 t3 \ System.out.println("按出圈的次序输出序号:");
* t, n7 i9 @8 \" q9 J //创建有m个值的数组
2 f+ Y# e$ l5 `- @8 `# T int[] a=new int[m];
7 a6 l0 l% U! l4 A; a/ B //初始长度,以后出圈一个,长度就减一
: }$ L* T9 f! r int len=m;# U; B2 j4 a8 S; b2 j: O' X5 D9 A
//给数组赋值+ u2 B' y- P+ @3 v
for(int i=0;i<a.length;i++)+ M& o& U0 j& X! u4 m5 Q: P! K
a[i]=i+1;
* d" y4 V' @- V //i为元素下表,j代表当前要报的数
`9 `" h9 g% k9 L& d int i=0;! D, h' X! L( Y+ e9 E; s8 x3 w
int j=1;
& q8 v1 c% ]0 ^+ z/ b5 U while(len>0){ J k/ u7 j6 W% y6 N. d) q; `6 w
if(a[i%m]>0){
2 [) j8 X' q6 W% G/ Q# M if(j%n==0){//找到要出圈的人,并把圈中人数减一$ s4 i; o% r: s: W, S
System.out.print(a[i%m]+" ");* i( Q& O. s0 ]1 W
a[i%m]=-1;# [' S# b# a; E7 f6 Q' w
j=1;8 J8 p& k% f4 V/ X) }; k5 T
i++;3 {6 [2 v) V# z. T
len--;8 V$ e% Y6 I! N* I& _
}else{! {$ U' t( x/ ~' N& H) A7 Z" C
i++;
# x( f8 \: i% K* P* r! ~ j++;
4 |% P' C8 u r0 ]+ ^* [ }1 X" {6 c* q- ?1 u7 U0 Q
}else{//遇到空位了,就跳到下一位,但j不加一,也就是这个位置没有报数' }; ?1 |9 l% |" h
i++;
) F* i0 s; X0 V0 x- I( Z; x }: E) c4 ~& o2 N( G. w
}
5 t j5 }9 |7 |$ {: `' w }
6 t' }8 ]$ [$ l& M: Y}
% [& h1 x8 P* D" y- c4 V# C" W% o5 ]7 k( y
! r, b! u1 t4 D" Y
|
|