该用户从未签到
|
, W2 l1 |# X) r* Q: Uimport java.util.Scanner;% W% _; a+ N; g L+ E
/**4 P9 ?% ^6 G. c0 U9 X
*使用数组实现约瑟夫环问题
: k. A! r# d3 O. V*由m个人围成一个首尾相连的圈报数。4 K! ^4 n, R: Z; k
*从第一个人开始,从1开始报数,报到n的人出圈,9 Q$ B5 k, F, O9 h' Y
*剩下的人继续从1开始报数,直到所有的人都出圈为止。; J5 X" E! G6 u1 L2 X
*对于给定的m和n,求出所有人的出圈顺序.
* v1 @3 f- r: N9 a: U3 T*/6 S' N6 {; f: D' m) F
public class RingTest{ U4 X4 [; C& i
public static void main(String[] args){/ F1 W- K8 T5 F, s, ?
System.out.println("程序说明如下:");4 L$ X( I& ?( I, p0 ^: T4 P
System.out.println("由m个人围成一个首尾相连的圈报数。从第一个人开始,从1开始报数,报到n的人出圈,剩下的人继续从1开始报数,直到所有的人都出圈为止。对于给定的m和n,求出所有人的出圈顺序.");
2 ~0 h2 _% E% i+ |6 }4 g) G //提示输入总人数3 l: y0 V: `1 K4 y4 `1 n+ n( c
System.out.println("请输入做这个游戏的总人数:");
3 h& {- a( I# S4 w: o5 V) k0 Y Scanner sca=new Scanner(System.in);$ k `* ]+ C$ B5 G U
int m=sca.nextInt();7 k: S+ Q% J" b
//提示输入要出圈的数值8 z0 K% p9 F2 e5 m8 p z$ y& j
System.out.println("请输入要出圈的数值:");
# i+ p* C3 Z* V( q" g' p int n=sca.nextInt();
% }/ m! q9 [9 F* v H( `- M' K System.out.println("按出圈的次序输出序号:"); ! O3 g j6 X4 c% V0 \7 |
//创建有m个值的数组
. ^ Q1 {# w2 o. }5 @" h8 o int[] a=new int[m];6 R( s7 m8 a6 K: r: j
//初始长度,以后出圈一个,长度就减一
6 g7 L: c& A/ h int len=m;) ?& r' K$ S& s9 d* J& S
//给数组赋值; ~! v4 ^5 B. P2 y$ S R$ T
for(int i=0;i<a.length;i++)& q. u! L; { H) m
a[i]=i+1;- j6 w: P( s5 C% @2 {, l3 R6 o: B1 ~
//i为元素下表,j代表当前要报的数6 a: V* [* _( Y
int i=0;
1 J5 w" N0 y( |- g; ]6 E int j=1;( R9 s. x1 T1 n6 E( m! |
while(len>0){* L5 T6 W" L Z, m* I! C
if(a[i%m]>0){
2 ]1 i' S3 g" i) S, _- w if(j%n==0){//找到要出圈的人,并把圈中人数减一" ^0 M* A& Q/ v2 O: v b+ T; ^# }6 q
System.out.print(a[i%m]+" ");5 f( `' v% V- O0 I
a[i%m]=-1;1 W7 D7 M. b' v2 {" `( X# ]: G% Z
j=1;
1 {9 L: M2 d& F3 Z i++;
: ?+ \8 L) ]7 q/ I9 A4 }1 } len--;
1 q: m3 K1 ^' b3 `9 m }else{
: h1 C3 `4 _( \: z/ g i++;& Q/ V3 Q; F. A' x' y$ R2 k
j++;
J! _9 U! w8 q5 s. A, R# }/ H }
# [$ m- v1 t0 m( J; e0 a }else{//遇到空位了,就跳到下一位,但j不加一,也就是这个位置没有报数& V& j0 I0 z* ~- }; Q
i++;7 ? y: i' q: r( q
}" f. I* @7 h5 @: j# N% A
}4 _) _; v( D0 n
}
& }. a6 A3 k5 d6 w}. A, o) B0 k y7 z
3 {& P' u# s' D7 r4 [
r/ ^$ [+ T. A6 ?/ C) s6 U: {
|
|