|
该用户从未签到
|
! w/ G) ~4 t( \- J# Jimport java.util.Scanner;7 l- N- l& ^% g- n1 V4 s1 N
/**( z5 P5 Z/ H8 X1 p: [' e
*使用数组实现约瑟夫环问题
' g. P! F+ k2 g% \2 s+ l; h1 h*由m个人围成一个首尾相连的圈报数。
7 W' h1 h0 B! C" r4 X {; M*从第一个人开始,从1开始报数,报到n的人出圈,, e1 |, Y. J! a# ^ F$ ^
*剩下的人继续从1开始报数,直到所有的人都出圈为止。, G# d E' c/ _0 e" F1 B X
*对于给定的m和n,求出所有人的出圈顺序.5 v; }1 h0 i* Z' j3 E" ^
*/& m6 w! z$ H3 S( |8 @
public class RingTest{( S+ G6 v# N$ d \, ]
public static void main(String[] args){ P5 w5 y% ]4 c. x& U
System.out.println("程序说明如下:");1 H3 R4 `5 v: u. q7 [4 f5 l7 g
System.out.println("由m个人围成一个首尾相连的圈报数。从第一个人开始,从1开始报数,报到n的人出圈,剩下的人继续从1开始报数,直到所有的人都出圈为止。对于给定的m和n,求出所有人的出圈顺序.");! }( O4 B) F0 Q- ]
//提示输入总人数
" D$ ~+ b3 O r- A5 S/ q System.out.println("请输入做这个游戏的总人数:");
5 j! q/ z# J, F( M Scanner sca=new Scanner(System.in);
0 q& @3 w0 @7 Q' I5 q( X int m=sca.nextInt();
+ t" e; A( R: ~5 z* [" V2 z //提示输入要出圈的数值1 ^& B1 S! A9 B/ R
System.out.println("请输入要出圈的数值:");
! f( a3 X3 x2 ?4 P% B int n=sca.nextInt();
* s3 U! l! G k: w/ N R System.out.println("按出圈的次序输出序号:"); ( C& \, i# [1 S7 r
//创建有m个值的数组
( ?" m/ b, S1 b+ H: z( D int[] a=new int[m];
2 g o9 I, J* }6 O //初始长度,以后出圈一个,长度就减一
' s6 H+ q$ J1 H- N1 T8 ^7 s, K int len=m;
* N, Y5 @, O! A# N8 e9 j4 B+ r, @ //给数组赋值
- P. F1 B; ]) w3 T3 p7 o6 N, w for(int i=0;i<a.length;i++)
! M% W+ o2 i7 }. m: P% r a[i]=i+1;
8 ?# n; k1 O3 f2 l& z1 w //i为元素下表,j代表当前要报的数# p+ Y+ j+ U g) h; @5 q; \* T
int i=0;; v! H* B$ Q- n+ \
int j=1;/ L o# D! g- {& C: }
while(len>0){
3 V& A% O2 H( ~4 Q9 O& ? if(a[i%m]>0){8 {* L: D% x0 ~ d3 E9 }5 L, s& N7 x
if(j%n==0){//找到要出圈的人,并把圈中人数减一( V+ g3 [0 X6 ^* E5 g
System.out.print(a[i%m]+" ");
1 m6 D) R7 s) [ a[i%m]=-1;
% p# y2 c- o1 G2 g j=1;
$ {% f4 I4 a0 Q/ C$ O# y! H i++;7 Y+ p0 w3 |. B: Z- {% l
len--;
$ Q2 T1 q4 b Z }else{
( \0 G4 k/ O7 h i++;
; g5 n b* r* T+ k+ G j++;
2 r( y! ~ d: y2 x }) ?% `+ j Y6 W, S6 w p, Y
}else{//遇到空位了,就跳到下一位,但j不加一,也就是这个位置没有报数
: p+ H7 Y. W* [+ M) ?8 D) y. Q i++;
' B* S% e; r* E& J5 ?, ?7 W }
+ D# ?) y# r) R% ~$ W }$ W, L- k. j" W
}
: e# u" ]: k# h}$ C: ~' b3 ?9 ^1 z$ S0 O- _
* \& G1 |( B* ]! I: I9 A8 i# L% S$ ^$ Z) j( Q3 p9 v' k# e; Q# L
|
|