其他分享
首页 > 其他分享> > 51nod 3216 授勋

51nod 3216 授勋

作者:互联网

历经旷日持久的战争之后,百纳瑞王国(The Kingdom of Binary)终于迎来了胜利的曙光。于是国王决定在胜利日这一天为在战争中奋战的将领们授勋。

已经需要为N位将领授勋,他们每人有一个功勋值p[i]。国王准备了不同种类的勋章,它们分别代表1,2,4,8,16......(即2的幂次)的功勋值。国王将用与每位将领功勋值对等数值的勋章授予他们,并且每位将领只会被授予一枚同种勋章

现在请你帮助国王算出,对于每一位将领,他需要准备多少枚勋章?

收起

输入

第一行输入一个数N,表示将领人数;
之后N行,每行输入一个数,分别表示每位将领的功勋值。

输出

输出N行,每行一个数表示需要授予该将领的勋章数。

数据范围

对于20%的数据,2≤N≤10,1≤p[i]≤200;
对于50%的数据,2≤N≤1000,1≤p[i]≤500000;
对于100%的数据,2≤N≤100000,1≤p[i]≤10^9;

输入样例

3
15
1
22

输出样例

4
1
3

样例解释

样例中,

第一位将领功勋值为15,授予8,4,2,1,共4枚勋章;

第二位将领功勋值为1,授予1,共1枚勋章;

第三位将领功勋章为22,授予16,4,2,共3枚勋章。

------------------------------------------------------------------------------------

解答:由于组成勋章的权值都是 2 的幂,因此问题转为求每个数的二进制表示中,有多少个 1。

 

标签:3216,勋章,51nod,样例,授勋,授予,功勋,将领
来源: https://blog.csdn.net/qq_62398832/article/details/123046421