2017-09-24 97 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

非常感谢您的帮助 –

相关问题