每一次的操作中,必须保证至少有一个数字是第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); } } }