|
该用户从未签到
|
h8 m) l6 E- u7 {8 ]" l: Wimport java.util.Scanner;! X0 ~0 z# @% F% y. B! F
/**. i% X- I$ O' c+ \
*使用数组实现约瑟夫环问题, Q4 [( k3 U) y! _$ Y
*由m个人围成一个首尾相连的圈报数。
. l* r: u4 ]* ?*从第一个人开始,从1开始报数,报到n的人出圈,
. D( S2 B" w H+ f/ x, M- d*剩下的人继续从1开始报数,直到所有的人都出圈为止。$ |# k1 b7 _. j5 `2 J8 h
*对于给定的m和n,求出所有人的出圈顺序.
% \; Z4 B& {1 B. f( K4 F: s+ b*/
2 Y. g7 N+ |" {$ K. ~public class RingTest{" N T8 g/ B% g/ `- Y g
public static void main(String[] args){
8 q5 c% r+ r, l System.out.println("程序说明如下:");1 z* |& ]! w. }5 \4 T n' u
System.out.println("由m个人围成一个首尾相连的圈报数。从第一个人开始,从1开始报数,报到n的人出圈,剩下的人继续从1开始报数,直到所有的人都出圈为止。对于给定的m和n,求出所有人的出圈顺序.");
& m6 x% g7 Z7 t* n6 f. q' T! @3 t //提示输入总人数
0 n0 s0 d# x3 B- j1 v: ] System.out.println("请输入做这个游戏的总人数:");3 f2 ~) g8 J& ^ h
Scanner sca=new Scanner(System.in);- s( e8 A8 G" K' ^% a* s, [
int m=sca.nextInt();: `6 `! G7 X& z7 Q$ p/ b
//提示输入要出圈的数值" P6 D7 b: E0 J) {4 Q
System.out.println("请输入要出圈的数值:"); ) ]3 W- `% ]7 X/ ^ L9 B+ i) A% D! v
int n=sca.nextInt();5 V Q' o0 n' `/ B7 _3 ? p4 D
System.out.println("按出圈的次序输出序号:"); / W# B1 N: s8 r8 n& v7 n6 o# |
//创建有m个值的数组
5 x; O' d# m/ [# u$ y0 r int[] a=new int[m];
9 k: s5 r# }! a. t //初始长度,以后出圈一个,长度就减一. m6 h8 D* X a, X- h
int len=m;/ w2 n# V& D- W" U& X3 a) B* P
//给数组赋值( W1 R6 I/ j& i* w4 A
for(int i=0;i<a.length;i++)
) l4 y0 v; ~( ? a[i]=i+1;
) l$ M8 r! e h8 ^* s //i为元素下表,j代表当前要报的数) h0 W& V' z* e$ k7 W
int i=0;! O L( [2 @# ]; A
int j=1;4 C P5 X# [# u6 J1 [% S1 Y
while(len>0){
' _- J6 Y8 g0 |7 a. ^2 k if(a[i%m]>0){$ G. @! L( v2 O0 Q8 x- b6 q
if(j%n==0){//找到要出圈的人,并把圈中人数减一
& L/ k/ O; ~+ w) l, Q System.out.print(a[i%m]+" ");
0 d/ n7 f. F; [+ N7 D+ l a[i%m]=-1;! c+ W. C# L1 C: o
j=1;
' Q4 C% H" u& E7 \ i++;$ m' Z6 h& X# G: {
len--;
, | A. c9 o* \+ i% l }else{& F7 R3 L6 P9 x6 b6 V, K& `- g
i++;# k1 B0 S: G8 Y6 U5 y
j++;
% ]+ H0 [4 y2 g( X7 V7 m0 r, @ }# ]! v' n) A0 ~1 H q, j
}else{//遇到空位了,就跳到下一位,但j不加一,也就是这个位置没有报数
9 b6 G. {! m- `. J( s9 S2 \ i++;
0 N8 ~+ d) t- o( A }
7 m4 F/ h7 u3 w- W }
* w% C* Q' E8 B4 U+ W, m0 m }
$ ]; t" n d( u; A6 a}) Q# E) p. m! \% [, r1 x' b( o# L
4 F* }) H7 y5 i$ h$ j9 p* C8 R
0 o4 Y% x" [5 o: E! u5 V: Y |
|