2017-09-24 73 views
3

我想要在每個步驟中只考慮一個integer,可以將array中的所有integers都可以整除的次數。 例如,最初如果我有array[2,4,2]count = 0一個數組中的所有數字都可以被2整除的次數

步驟1

[1,4,2] , count=1 

步驟2

[1,2,2] , count=2 

步驟3

[1,1,2] , count=3 

步驟4

[1,1,1] , count=4 

我對這個問題的方法在下面給出:

代碼

public static void main(String[] args) { 
    int[] ar={2,4,2}; 
    int[] p=new int[ar.length]; 
    int count=0; 
    for (int i=0;i<ar.length ;i++) { 
     if(ar[i]>=1){ 
      ar[i]=ar[i]/2; 
      count++; 
     } 
    } 
    for (int x:ar) { 
     System.out.println(x); 
    } 
    System.out.println("Count:"+count); 

} 

輸出

1 
2 
1 
Count:3 

在上面給出的代碼的問題是,該array被掃描一次,並且我要掃描的陣列,直至全部integers are no more divisible by 2

+0

「我想掃描數組,直到所有整數大於或等於1」 - 但它們從一開始就已經大於或等於1,並且它們仍然是這樣。 – user2357112

+0

我編輯了這個問題,我希望簡化'array',以便不再有'整數'被2整除。 –

回答

1

請注意,您有兩個問題:

  1. 您最多一次將陣列的每個元素除以2。
  2. 您除以2的陣列的元件,而不首先檢查它們是否是整除2.

需要一個內部循環,將通過2,只要它是整除將每個數組元素:

public static void main(String[] args) { 
    int[] ar={2,4,2}; 
    int[] p=new int[ar.length]; 
    int count=0; 
    for (int i=0;i<ar.length ;i++) { 
     while (ar[i] % 2 == 0 && ar[i] > 0) { // keep dividing ar[i] by 2 as long as 
               // it is divisible by 2 
      ar[i]=ar[i]/2; 
      count++; 
     } 
    } 
    for (int x:ar) { 
     System.out.println(x); 
    } 
    System.out.println("Count:"+count); 
} 
+0

非常感謝您的幫助 –

1
 for (int i=0;i<ar.length ;i++) { 
     while(ar[i]%2==0 && ar[i]>1){ 
      ar[i]=ar[i]/2; 
      count++; 
     } 
    } 

這就夠了。

+0

非常感謝您的幫助 –

相關問題