授勳 51Nod - 3216

Jason--Zhu發表於2020-11-09

歷經曠日持久的戰爭之後,百納瑞王國(The Kingdom of Binary)終於迎來了勝利的曙光。於是國王決定在勝利日這一天為在戰爭中奮戰的將領們授勳。

已經需要為N位將領授勳,他們每人有一個功勳值pi。國王準備了不同種類的勳章,它們分別代表1,2,4,8,16…(即2的冪次)的功勳值。國王將用與每位將領功勳值對等數值的勳章授予他們,並且每位將領只會被授予一枚同種勳章。

現在請你幫助國王算出,對於每一位將領,他需要準備多少枚勳章?

Input
第一行輸入一個數N,表示將領人數; 之後N行,每行輸入一個數,分別表示每位將領的功勳值。
Output
輸出N行,每行一個數表示需要授予該將領的勳章數。
Sample Input
3
15
1
22
Sample Output
4
1
3

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<stdio.h>
#include<cmath>
using namespace std;
int n,x,k,s=0,f;
int main()
{
    cin>>n;
    while(n--)
    {
        cin>>x;
        while(x!=0)
        {
            if(x%2==1)
            {
                f++;
            }
            x/=2;
        }
        /*if(x==1)
        {
            f=1;
        }
        else
        {
            for(int i=x;i>=0;i--)
            {
                k=pow(2,i);
                if(k<=x)
                {
                    s+=k;
                    if(s<=x)
                    {
                        f++;
                    }
                    else
                    {
                        s-=k;
                    }
                }
            }
        }*/
        cout<<f<<endl;
        f=0;
    }
    return 0;
}

相關文章