1. 程式人生 > >循環刪除數組中元素的問題

循環刪除數組中元素的問題

sca class arr exti oid color out 包括 system.in

一個整形數組,裏面存的都是正整數,例如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 }

循環刪除數組中元素的問題