由m個(gè)人圍成一個(gè)首尾相連的圈報(bào)數(shù)。從第一個(gè)人開(kāi)始,從1開(kāi)始報(bào)數(shù),報(bào)到n的人出圈,剩下的人繼續(xù)從1開(kāi)始報(bào)數(shù),直到所有的人都出圈為止。對(duì)于給定的m和n,求出所有人的出圈順序.
import java.util.Scanner;
/**
*使用數(shù)組實(shí)現(xiàn)約瑟夫環(huán)問(wèn)題
*由m個(gè)人圍成一個(gè)首尾相連的圈報(bào)數(shù)。
*從第一個(gè)人開(kāi)始,從1開(kāi)始報(bào)數(shù),報(bào)到n的人出圈,
*剩下的人繼續(xù)從1開(kāi)始報(bào)數(shù),直到所有的人都出圈為止。
*對(duì)于給定的m和n,求出所有人的出圈順序.
*/
public class RingTest{
public static void main(String[] args){
System.out.println("程序說(shuō)明如下:");
System.out.println("由m個(gè)人圍成一個(gè)首尾相連的圈報(bào)數(shù)。從第一個(gè)人開(kāi)始,從1開(kāi)始報(bào)數(shù),報(bào)到n的人出圈,剩下的人繼續(xù)從1開(kāi)始報(bào)數(shù),直到所有的人都出圈為止。對(duì)于給定的m和n,求出所有人的出圈順序.");
//提示輸入總?cè)藬?shù)
System.out.println("請(qǐng)輸入做這個(gè)游戲的總?cè)藬?shù):");
Scanner sca=new Scanner(System.in);
int m=sca.nextInt();
//提示輸入要出圈的數(shù)值
System.out.println("請(qǐng)輸入要出圈的數(shù)值:");
int n=sca.nextInt();
System.out.println("按出圈的次序輸出序號(hào):");
//創(chuàng)建有m個(gè)值的數(shù)組
int[] a=new int[m];
//初始長(zhǎng)度,以后出圈一個(gè),長(zhǎng)度就減一
int len=m;
//給數(shù)組賦值
for(int i=0;i<a.length;i++)
a[i]=i+1;
//i為元素下表,j代表當(dāng)前要報(bào)的數(shù)
int i=0;
int j=1;
while(len>0){
if(a[i%m]>0){
if(j%n==0){//找到要出圈的人,并把圈中人數(shù)減一
System.out.print(a[i%m]+" ");
a[i%m]=-1;
j=1;
i++;
len--;
}else{
i++;
j++;
}
}else{//遇到空位了,就跳到下一位,但j不加一,也就是這個(gè)位置沒(méi)有報(bào)數(shù)
i++;
}
}
}
}
posted on 2010-01-15 23:45
期待明天 閱讀(17117)
評(píng)論(4) 編輯 收藏 所屬分類(lèi):
Java