循环删除数组中元素的问题

一个整形数组,里面存的都是正整数,例如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 }

 

posted @ 2017-10-26 10:52  JiaJoa  阅读(951)  评论(0编辑  收藏  举报