題目描述:
有一個數組a[N]順序存放0~N-1,要求每隔兩個數刪掉一個數,到末尾時循環至開頭繼續進行,求最後一個被刪掉的數的原始下標位置。以8個數(N=7)爲例:{0,1,2,3,4,5,6,7},0->1->2(刪除)->3->4->5(刪除)->6->7->0(刪除),如此循環直到最後一個數被刪除。
輸入描述:
每組數據爲一行一個整數n(小於等於1000),爲數組成員數,如果大於1000,則對a[999]進行計算。
輸出描述:
一行輸出最後一個被刪掉的數的原始下標位置。
輸入例子:
8
輸出例子:
6
參考代碼:
import java.util.ArrayList;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner fin = new Scanner(System.in);
int N = fin.nextInt();
if(N > 1000){
N = 1000;
}
ArrayList<Integer> list = new ArrayList<Integer>();
for (int i = 0; i < N; i++) {
list.add(i);
}
while (list.size() != 1) {
int i = 0;
for (; i < 2; i++) {
list.add(list.remove(0));
}
if (i == 2) {
list.remove(0);
}
}
System.out.println(list.get(0));
}
}
比較高效的實現方法:
import java.util.ArrayList;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner fin = new Scanner(System.in);
int N = fin.nextInt();
if(N > 1000){
N = 1000;
}
ArrayList<Integer> list = new ArrayList<Integer>();
for (int i = 0; i < N; i++) {
list.add(i);
}
int index = 0;
while (list.size() != 1) {
index = (index + 2 + list.size()) % list.size();
list.remove(index);
}
System.out.println(list.get(0));
}
}
建議先本地調試,通過後再網上提交。
轉載請附上出處!