题目
题目描述
有n个人要进行比赛,比赛规则如下:
假设每轮比赛的人是m,取最大的k,k=2t且k≤m。这k个人每2人举行一场比赛,胜利者进入一下轮,失败者被淘汰。
余下的m-k个人,不进行比赛,直接进入下一轮
直到决出冠军,比赛结束。
比如有5个人参加比赛,第一轮举办2场,剩余3人进入第二轮,第二轮1场,剩余2人进入第三轮,第三轮举办1场决出冠军,所以一共要办4场比赛。 请问一共要举行几轮多少场比赛?
输入
第一行是一个整数K,表示样例的个数。 以后每行一个样例,为n(1≤n≤1000000000)
输出
每行输出两个整数,轮数和比赛场数,中间用一个空格隔开。
样例输入
2
1
5
样例输出
0 0
3 4
#include<stdio.h>
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
int n;
scanf("%d",&n);
int cnt1=0,cnt2=0;
while(n!=1)
{
int temp=n%2;
int m=n-temp;//找到最大的2的整数次幂
cnt1++;
cnt2+=m/2;
n-=m/2;
}
printf("%d %d\n",cnt1,cnt2);
}
return 0;
}
疑问
样例能过,没有问题,提交之后是WA