【毎週1回計算】最後に残った人を求めるのは何人目(1周目の人が数を報告し、3の脱退を報告する)
テーマ:n人が1周して、順番に並べます.最初の人から数え始め(1から3まで)、3までの人は輪を脱退して、最後に残ったのは元の何位ですか?
問題を解く:
例えばn=2、最後に残ったのは2
n=3、最後に残ったのは2
n=4、最後に残ったのは1
n=5、最後に残ったのは4
この問題は、書いているうちに考えがつく.
問題を解く:
例えばn=2、最後に残ったのは2
n=3、最後に残ったのは2
n=4、最後に残ったのは1
n=5、最後に残ったのは4
この問題は、書いているうちに考えがつく.
package com.jandmin.demo.leetcode;
import com.alibaba.fastjson.JSONObject;
/**
* @description:
* n , 。 ( 1 3 ), 3 ,
* ?
* n = 2, 2
* n = 3, 2
* n = 4, 1
* n = 5, 4
* @author: JandMin
* @create: 2019-08-09
**/
public class LastRemainderSerial {
public static void main(String[] args) {
int n = 100;
//
int[] serials = initSerial(n);
System.out.println(JSONObject.toJSONString(serials));
// : 0
excludeThird(serials);
System.out.println(JSONObject.toJSONString(serials));
// 0
int last = getLastSerial(serials);
System.out.println("the last remainder is " + last);
}
/**
* @Description: 0
* @Date: 2019/8/9
* @param lastArray
* @return: int
*/
private static int getLastSerial(int[] lastArray) {
for(int i : lastArray){
if(i != 0){
return i;
}
}
return 0;
}
/**
* @Description: : 0
* @Date: 2019/8/9
* @param serials
* @return: void
*/
private static void excludeThird(int[] serials) {
//
int remainder = serials.length;
int len = remainder;
//
int start = 0;
// 0
while (remainder > 1){
for(int i = 0; i