每一次的操作中,必须保证至少有一个数字是第1种改变;并且经过每次操作后,每一个数字都必须是整数。
牛牛得知,每进行一次操作,他就可以得到一颗西瓜糖,但是由于孱弱的数学功底,他不知道何时该对某一个数字进行第一种还是第二种改变,这使得他十分纠结,于是他找来了睿智的你,希望你帮他计算出,他最多可以得到多少颗西瓜糖。
每一次的操作中,必须保证至少有一个数字是第1种改变;并且经过每次操作后,每一个数字都必须是整数。
牛牛得知,每进行一次操作,他就可以得到一颗西瓜糖,但是由于孱弱的数学功底,他不知道何时该对某一个数字进行第一种还是第二种改变,这使得他十分纠结,于是他找来了睿智的你,希望你帮他计算出,他最多可以得到多少颗西瓜糖。
第一行:一个整数n,表示序列中数字的个数,1 <= n <= 10000;
第二行:n个数字,每个数字ai满足1 <= ai <= 109。
一个整数,表示最多可以得到的西瓜糖的颗数。
2 1 4
2
4 3 3 5 9
0
//所有数字的2的因子数量之和
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int n = scan.nextInt();
int x[] = new int[n];
for (int i = 0; i < n; i++)
x[i] = scan.nextInt();
int count = 0;
for(int i=0;i<n;i++) {
while(x[i]%2==0) {
x[i]/=2;
count+=1;
}
}
System.out.println(count);
}
} //所有偶数的2幂相加
import java.util.Scanner;
public class Main{
public static int cnt = 0;
public static void numberOfSugar(int[] a, int b){
for(int i = 0; i < b; i++){
while(a[i]%2 == 0){
a[i] = a[i] / 2;
cnt++;
}
}
}
public static void main(String[] args){
Scanner input = new Scanner(System.in);
String d = input.nextLine();//读取输入转换时间长
String s = input.nextLine(); int c = Integer.parseInt(d);
String[] arr = s.split(" ");
int[] num = new int[c];
for(int i = 0; i < c; i++){
num[i] = Integer.parseInt(arr[i]);
}
numberOfSugar(num, c);
System.out.println(cnt);
}
}
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
/*
*
* 给出一个含有n个数字的序列a1,a2,a3,...an,可以进行以下操作:
一次操作定义为对这个序列的每个数字进行以下两种改变之一:
1.ai ÷ 2
2.ai × 3
每一次的操作中,必须保证至少有一个数字是第1种改变;并且经过每次操作后,每一个数字都必须是整数。
牛牛得知,每进行一次操作,他就可以得到一颗西瓜糖,但是由于孱弱的数学功底,
* 他不知道何时该对某一个数字进行第一种还是第二种改变,这使得他十分纠结,于是他找来了睿智的你,希望你帮他计算出,他最多可以得到多少颗西瓜糖。
* */
public class Chosen {
public static void main(String[] args) throws IOException {
BufferedReader bufferedReader=new BufferedReader(new InputStreamReader(System.in));
int size=Integer.parseInt(bufferedReader.readLine());
String[] nums=bufferedReader.readLine().split(" ");
int[] array=new int[size];
int count=0;
for(int i=0;i<size;i++){
array[i]=Integer.parseInt(nums[i]);
while(array[i]%2==0){
count++;
array[i]/=2;
}
}
System.out.println(count);
}
}
int main(){
int i[10000];
int n,s,count=0,sum=0,sun;
int c=0;
scanf("%d",&n);
for( ;count<n;count++)
scanf("%d", &i[count]);
for( ;c<n;c++){
if(i[c]%2==0){
s=0;
sun=i[c];
while(!s){
s=sun%2;
if(sun%2==0){
s=0;
sum++;
sun=sun/2;
}
else
s=1;
}
}
}
printf("%d",sum);
return 0;
}
所有偶数的二次幂相加
#include <bits/stdc++.h>
// #define TEST_INSTANCE
#ifdef TEST_INSTANCE
#include <gtest/gtest.h>
static int fast = []() {std::ios_base::sync_with_stdio(0); std::cin.tie(0); std::cout.tie(0); return 0; }();
#endif
class Solution {
public:
Solution(void): c_(0) {}
void add(size_t x) {
while(this->isEven(x)) {}
}
bool isEven(size_t &n) {
if(1 == n % 2) return false;
n >>= 1; ++this->c_; return true;
}
size_t go(void) {
#ifndef TEST_INSTANCE
std::cout << this->c_ << "\n";
#endif
return this->c_;
}
protected:
size_t c_;
};
/****************** TEST ******************/
#ifdef TEST_INSTANCE
TEST(SolutionTest, test1) {
auto p = new Solution;
size_t N = 2;
std::vector<size_t> xs = {
1, 4,
};
size_t out = 2;
for(auto &x: xs) p->add(x);
EXPECT_EQ(p->go(), out);
delete p;
}
TEST(SolutionTest, test2) {
auto p = new Solution;
size_t N = 4;
std::vector<size_t> xs = {
3, 3, 5, 9,
};
size_t out = 0;
for(auto &x: xs) p->add(x);
EXPECT_EQ(p->go(), out);
delete p;
}
TEST(SolutionTest, test3) {
auto p = new Solution;
size_t N = 4;
std::vector<size_t> xs = {
5, 2, 16, 3,
};
size_t out = 5;
for(auto &x: xs) p->add(x);
EXPECT_EQ(p->go(), out);
delete p;
}
#endif
/****************** TEST ******************/
int main(int argc, char **argv) {
#ifdef TEST_INSTANCE
testing::InitGoogleTest(&argc, argv);
return RUN_ALL_TESTS();;
#else
size_t N, x;
auto p = new Solution;
while(std::cin >> N) {
for(size_t i = 0; i < N; ++i) {std::cin >> x; p->add(x);}
p->go();
}
#endif
}
from math import log
listNum = input()
listInfo = input().split()
list2 = []
for i in listInfo:
i = int(i)
if i%2 == 0:
list2.append(i)
if len(list2) == 0:
print("0")
else:
a = 0
for j in list2:
result = j & (j-1)
if result != 0:
while True:
if j%2 == 0:
a=a+1
j=j//2
else:
break
else:
c = log(j,2)
a = a + int(c)
print(a)
import java.util.*;
public class Main{
public static void main(String[] args){
Scanner input=new Scanner(System.in);
while(input.hasNext()){
int n=input.nextInt();
int[] a=new int[n];
int count=0;
for(int i=0; i<n; i++){
a[i]=input.nextInt();
if(a[i]%2==0){
while(a[i]%2==0){
a[i]/=2;
count++;
}
}
}
System.out.println(count);
}
}
}