一个数组中的所有数字都可以被2整除的次数
问题描述:
我想要在每个步骤中只考虑一个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
答
请注意,您有两个问题:
- 您最多一次将阵列的每个元素除以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
非常感谢您的帮助 –
答
for (int i=0;i<ar.length ;i++) {
while(ar[i]%2==0 && ar[i]>1){
ar[i]=ar[i]/2;
count++;
}
}
这就够了。
+0
非常感谢您的帮助 –
“我想扫描数组,直到所有整数大于或等于1” - 但它们从一开始就已经大于或等于1,并且它们仍然是这样。 – user2357112
我编辑了这个问题,我希望简化'array',以便不再有'整数'被2整除。 –