swjtu 1037: SLAM DUNK

1037: SLAM DUNK

Time Limit: 1 Sec  Memory Limit: 128 MB Submit: 36  Solved: 9 [ Submit][ Status][ Web Board]

Description

"想大声说我喜欢你 顶着耀眼的阳光我在街头奔跑着 你像平时一样地拍打我的肩头却从来不曾挽上我手臂 不知从何时开始我毫无理由地迷恋上你我的眼睛总是追寻着你离不开你 我已经无药可救地 crazy for you " 小W喜欢上了《灌篮高手》,他的倔强也许就是在那时有的吧。樱木花道救球的瞬间,流川枫的冷静,和仙道的闲庭信步,都变成了烙印被小W所铭记。小W最欣赏的是樱木花道的执着,然而最期盼的,却是仙道闲庭信步宛若一切都在掌握之中的睿智与冷静。有一天小W在睡梦中是,樱木花道找到了小W。因为赤木刚宪给他出了一道数学题,如果樱木花道做出来,他就可以和晴子约会了。 作为樱木后援团的智囊,这个任务自然交给你了。 给你一个N,求杨辉三角第N行中奇数的个数。 如果你不知道杨辉三角形,它就在下面:(我们的定义方式与你知道的有所不同,勿喷)    
        1 1 -->这是第一行  
       1 2 1  
     1 3 3 1
    1 4 6 4 1
    。。。。。

Input

一个数T,表示有T个Cases。(T<=100) 对每个Case: 一行一个整数N,表示求第N行中奇数的个数。 保证N<=1e15

Output

对每个Case,输出一个整数T,表示第N行有T个奇数

 

Sample Input

4
1
2
3
4

Sample Output

2
2
4
2


题意解读:从上面的题意可以联想到多项式的平方展开时的系数
也就是判断组合数C(n,k) k=0,1...n 中奇数的个数。
要知道的:组合数的奇偶性判定方法为:
对于C(n,k),若n&k == k 则c(n,k)为奇数,否则为偶数。

要求C(n,k)中奇数的个数,只要把n变为二进制计算其中1的个数。
假设n化为二进制(n1n2n3n4) k=0,1...n
当n1=1时,k1可取1或0,因为1&k1=k1,故这一位有两种可能,ans*=2;
而当n1=0时,k1只能取0,因为0&0=0,所以这一位只有一种情况,ans*=1;

 1 #include<stdio.h>
 2 int main()
 3 {
 4     int T;
 5     scanf("%d",&T);
 6     while(T--){
 7         long long M,ans=1;
 8         scanf("%lld",&M);
 9         while(M>0){
10             if(M%2==1) ans*=2;
11             M/=2;
12             }
13         printf("%lld\n",ans);
14     }
15 }
View Code
 
  

 

 
  
 
 

转载于:https://www.cnblogs.com/-dante-/archive/2013/05/29/3107010.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值