筆試刷題-牛客網
阿新 • • 發佈:2019-02-14
題目描述:
/** 給出一個含有n個數字的序列a1,a2,a3,...an,可以進行以下操作: 一次操作定義為對這個序列的每個數字進行以下兩種改變之一: 1.ai ÷ 2 2.ai × 3 每一次的操作中,必須保證至少有一個數字是第1種改變; 並且經過每次操作後,每一個數字都必須是整數。 牛牛得知,每進行一次操作,他就可以得到一顆西瓜糖, 但是由於孱弱的數學功底, 他不知道何時該對某一個數字進行第一種還是第二種改變, 這使得他十分糾結,於是他找來了睿智的你,希望你幫他計算出, 他最多可以得到多少顆西瓜糖。 輸入描述: 第一行:一個整數n,表示序列中數字的個數,1 <= n <= 10000; 第二行:n個數字,每個數字ai滿足1 <= ai <= 109。 輸出描述: 一個整數,表示最多可以得到的西瓜糖的顆數。 輸入例子1: 2 1 4 輸出例子1: 2 輸入例子2: 4 3 3 5 9 輸出例子2: 0 */
思路如下:
統計每個數含有多少個2的因子
程式碼如下:
#include<stdio.h> #include<iostream> using namespace std; int main() { int N, cnt=0; scanf("%d", &N); for(int i=0; i<N; i++){ int data; scanf("%d", &data); while(data && !(data&1)){ cnt++; data>>=1; } } printf("%d", cnt); return 0; }