选队长
时间限制(普通/Java) :
1000 MS/ 3000 MS 运行内存限制 : 65536 KByte
总提交 : 273 测试通过 : 80
总提交 : 273 测试通过 : 80
比赛描述
南邮ACM集训队要选一名队长,按如下规则进行:所有的同学围成一圈,分别标号为1,2,3......n。从标号为1的同学开始依次报数1,2,1,2,......,所有报数为2的同学出列,剩下的同学继续依次报数,直到最后剩下一名同学为止,这名同学成为南邮ACM集训队的队长。如果告诉你队长的标号,请问南邮ACM集训队至少有多少名同学。
输入
多组输入数据。每组数据仅一个数k,表示队长的标号。(1<=k<=10^9)
输出
每行输出一个整数,南邮ACM集训队最少的人数。
样例输入
1
3
样例输出
1
3
提示
题目来源
ym
#include<stdio.h>
int main(){
__int64 k,i;
while(scanf("%I64d",&k)==1){
i = 1;
while(i<=k){
i<<=1;
}
printf("%I64d\n",(i>>1)+((k+1)>>1)-1);
}
}