題目:有一艘海盜船上面有30個(gè)海盜,分別為海盜1-30號(hào)忽然海盜船撞上了冰山禾锤,船上只能留下一個(gè)人私股,船長(zhǎng)命令大家循環(huán)數(shù)數(shù),數(shù)到7和7的倍數(shù)的人恩掷,跳到海里去庇茫。
請(qǐng)問最后留下的那個(gè)人是第一開始的幾號(hào)海盜?
分析:
代碼:
import java.util.ArrayList; import java.util.List; import java.util.Scanner;
/** * N個(gè)人從1到N編號(hào)螃成,圍城一圈旦签, * 從1開始報(bào)數(shù)查坪, 數(shù)到m時(shí),將m的編號(hào)輸出宁炫,那個(gè)船員將會(huì)殞命偿曙, * 下一個(gè)從1再開始報(bào)數(shù),直到所有人都出去//由于數(shù)的是7或者7的倍數(shù)羔巢,相當(dāng)于1234567循環(huán)數(shù)望忆,數(shù)到7就下去 * */
public class Haidao1 { public static void main(String[] args) { List list = new ArrayList(); System.out.println("請(qǐng)輸入被困在船上的海盜人數(shù)N:"); Scanner sca = new Scanner(System.in); int N = sca.nextInt(); // 提示輸入要出圈的數(shù)值
System.out.println("請(qǐng)輸入要跳下船去的數(shù)值M:");
int M = sca.nextInt(); System.out.println("按跳下的次序輸出序號(hào):");
//自動(dòng)裝箱這里裝入30號(hào) for(int i=0 ;i<N;i++){ list.add(i+1); } int i=-1;
//初始化數(shù)值用i來記錄 int countX=0;//記錄數(shù)數(shù)的數(shù)值
while(list.size()!=0)
{ ++i; i
f(i== list.size())
{ i=0; }
++countX; if(countX==M){//輸出 System.out.print(list.get(i)+ " "); list.remove(i); countX=0; i--;//修正 } } System.out.println("輸出序號(hào)的最后一個(gè)就是最后生還的人");} }