该用户从未签到
|
, Y+ i3 f7 I6 y% _; J% j# mimport java.util.Scanner;/ l4 M; x; o/ E$ M( ?) s' I
/**
4 r2 Q4 _% z" U5 a*使用数组实现约瑟夫环问题5 e7 w* ~' } C
*由m个人围成一个首尾相连的圈报数。
1 k" B7 f: v& n x4 X( L& B*从第一个人开始,从1开始报数,报到n的人出圈,
3 w. m" C6 _- }# j" m! B*剩下的人继续从1开始报数,直到所有的人都出圈为止。 W6 A% B0 ~( M, p' X
*对于给定的m和n,求出所有人的出圈顺序.
' t, [9 Q8 Y( Y2 ?( ~*/
7 a3 F) t3 R( Y& M* Rpublic class RingTest{" b- M. b0 l9 Y! g% v1 T
public static void main(String[] args){) n5 b( i5 \, O ]; x* Y* C
System.out.println("程序说明如下:");
4 ~. |. y' k( | y3 E5 S& t2 ~9 y System.out.println("由m个人围成一个首尾相连的圈报数。从第一个人开始,从1开始报数,报到n的人出圈,剩下的人继续从1开始报数,直到所有的人都出圈为止。对于给定的m和n,求出所有人的出圈顺序.");
" t9 P+ y7 ]% h- B //提示输入总人数
) M3 Y, Q5 P, W/ p$ M" S6 c' l System.out.println("请输入做这个游戏的总人数:");- S; L% b9 l3 ]/ o1 b. w% h- t$ }
Scanner sca=new Scanner(System.in);- Z7 A, z9 M0 r2 m; l `2 i1 K
int m=sca.nextInt();
; Y& ?9 y) y# H' q: y- w //提示输入要出圈的数值1 a9 ^$ \9 E1 R: E
System.out.println("请输入要出圈的数值:"); ( ]1 b* Y% c7 b
int n=sca.nextInt();
2 Y* `9 p9 Z! z' Q. k; J System.out.println("按出圈的次序输出序号:");
0 A' |. M& n W4 A6 R; X //创建有m个值的数组9 {+ I/ A' ~: \3 H( {
int[] a=new int[m];
2 D# u5 V2 m' n3 U N //初始长度,以后出圈一个,长度就减一
2 j7 @$ F! h; e6 J int len=m;
2 D" g V9 M2 S- {0 v* B- g9 d5 B //给数组赋值
, ~1 D! N0 \6 x6 k2 f6 D for(int i=0;i<a.length;i++)5 K7 o! Z6 j( h2 r" V5 M
a[i]=i+1;5 n5 S; S& v V$ S3 _
//i为元素下表,j代表当前要报的数( e- ?' ~" m" J4 M
int i=0;
7 e5 c4 w0 \0 P, v5 | int j=1;
- |& ?) @# ]; ^; a# O, W( B: ] while(len>0){
+ v1 Q/ |* D$ ] @3 Y$ j! e if(a[i%m]>0){
# p* O- z7 a2 K% @ if(j%n==0){//找到要出圈的人,并把圈中人数减一; s" @2 c' e' i" e% L q0 G# i' X
System.out.print(a[i%m]+" ");
5 A5 x9 F$ O7 G! U* R" A: ` a[i%m]=-1;
$ o2 [* v& T9 n( g, W: e j=1;
( j. k! y& y' J3 n i++;
3 R) l3 K1 q# s* z len--;
" y+ l7 a' P+ m }else{
* b. L/ Z1 t* Z# E( ] i++;& {, x1 g) F; t# ~3 v" @
j++;- R# s. k5 K. a$ |
}
9 z, w8 o+ c0 u. D# b }else{//遇到空位了,就跳到下一位,但j不加一,也就是这个位置没有报数) E/ e F1 ?/ r5 ^! x( o
i++;3 y$ C& L3 K d, F4 x
}
8 K8 P5 z& I/ S' b0 e2 M' S' B }
+ t8 V& x, P& `8 B }
w/ Y4 ^$ {3 h5 z5 ^}
6 W4 N2 ]7 p+ F* s" w% y M4 @# r W! i
$ K: s3 {# P+ |# l: U$ t. y |
|