循环删除数组中元素的问题
一个整形数组,里面存的都是正整数,例如2,1,3,4,5,7,现在要求每隔m个数删除一个数,进行到数组尾部后,再循环至数组首部,如此反复,直到数组的所有数删除为止,求最后一个被删除的数在数组中的原始下标。
例如:对于数组 arr = [2,1,3,4,5,7],若 m = 2时,整个删除过程(把删除的标记为-1)如下:
元素数组:[2,1,3,4,5,7]
第一次:[2, 1, 3, -1, 5, 7]
第二次:[-1, 1, 3, -1, 5, 7]
第三次:[-1, 1, 3, -1, -1, 7]
第四次:[-1, 1, -1, -1, -1, 7]
第五次:[-1, 1, -1, -1, -1, -1]
第六次:[-1, -1, -1, -1, -1, -1]
因此,最后一个被被删除的数为1,其在数组中的下标为1.
具体的代码,实现如下(Java版):
1 import java.util.Scanner; 2 /** 3 * 数组数的循环删除问题,一个数组,例如,2,1,3,4,5,7,每隔2个数删除,删除到尾部再循环到首部,如此反复进行,直到删除最后一个数 4 * 输出最后一个被删除数的下标,为1 5 * @author JiaJoa 6 * 输入包括3行,第一个行n为数组的长度,第二行为n个正整数,以空格隔开,第三行为间隔m 7 * 例如: 8 * 6 9 * 2 1 3 4 5 7 10 * 2 11 * 输出:1 12 */ 13 public class RecurrNumber { 14 15 public static void main(String[] args) { 16 Scanner in = new Scanner(System.in); 17 int n = in.nextInt(); //长度为n的数组 18 int[] arr = new int[n]; 19 for(int i=0;i<n;i++){ 20 arr[i] = in.nextInt(); 21 } 22 23 int m = in.nextInt(); //每间隔为m删除一个数 24 int index = getResult(arr,m); 25 System.out.println(index); 26 in.close(); 27 } 28 29 public static int getResult(int[] arr,int m){ 30 int len = arr.length; 31 int start = 1; 32 int count=0; 33 int flag = m; 34 while(flag>0){ 35 if(count==len) 36 break; 37 if(start>=len){ 38 start = start%len; 39 } 40 if(arr[start]!=-1){ 41 flag--; 42 } 43 start++; 44 if(flag==0){ 45 if(start>=len){ 46 start = start%len; 47 } 48 while(arr[start]==-1){ 49 start++; 50 if(start>=len){ 51 start = start%len; 52 } 53 } 54 arr[start]=-1; 55 count++; 56 flag=m; 57 } 58 } 59 return start; 60 } 61 }