標題:報數(shù)游戲
有 n (1<n<10000)個小朋友站成一個圓圈辟犀。
選定一個小朋友為1號摔握,從他(她)開始順時針編號:1,2,3,4,...
游戲開始! 從1號小朋友起,順時針報數(shù),從1報起。
即:1號小朋友報1,2號小朋友報2姑宽,3號小朋友報3, ....
游戲規(guī)定,報到數(shù)字 m(1<m<100) 的小朋友立即退出報數(shù)圈闺阱。
在他(她)的順時針方向的下一個小朋友(如果有的話)開始重新從1報數(shù)...
游戲這樣一直進行下去炮车,直到圈中只剩下一個小朋友。
求最后剩下的小朋友的編號酣溃。
輸入:兩個整數(shù)瘦穆,n 和 m, 用空格分開赊豌。含義如上扛或。
輸出:一個整數(shù),表示最后剩下的小朋友的編號碘饼。
比如:
輸入:
15 3
程序應該輸出:
5
再比如:
輸入:
7 4
程序應該輸出:
2
資源約定:
峰值內存消耗(含虛擬機) < 256M
CPU消耗 < 1000ms
數(shù)學解法
static int k=1;
public static void main(String[] args) {
}
@SuppressWarnings("unused")
private static void M1() {
Scanner input = new Scanner(System.in);
int int1 = input.nextInt();
int int2 = input.nextInt();
int s=0;
for(int i=2;i<=int1;i++)
{
s=(s+int2)%i;
}
System.out.println(s+1);
input.close();
}
鏈表解法
private Integer yueSeFu(int num1, int num2) {
LinkedList<Integer> list = new LinkedList<Integer>();
// 初始化數(shù)據(jù)隊列
for (int i = 1; i <= num1; i++) {
list.add(i);
}
int book = 1;
while (list.size() > 1) {
ListIterator<Integer> it1 = list.listIterator();
while (it1.hasNext()) {
it1.next();
if (book == num2) {
it1.remove();
book = 1;
} else {
book++;
}
}
}
return list.get(0);
}