Our school is planning to hold a new exciting computer programming contest. During each round of the contest, the competitors will be paired, and compete head-to-head. The loser will be eliminated, and the winner will advance to next round. It proceeds until there is only one competitor left, who is the champion. In a certain round, if the number of the remaining competitors is not even, one of them will be chosed randomly to advance to next round automatically, and then the others will be paired and fight as usual. The contest committee want to know how many rounds is needed to produce to champion, then they could prepare enough problems for the contest.
InputThe input consists of several test cases. Each case consists of a single line containing a integer N - the number of the competitors in total. 1 <= N <= 2,147,483,647. An input with 0(zero) signals the end of the input, which should not be processed.
OutputFor each test case, output the number of rounds needed in the contest, on a single line.
Sample Input8 16 15 0Sample Output
3 4 4
#include < cmath >
using namespace std;
int main()
{
int n;
while (cin >> n,n != 0 ){
for ( int i = 0 ;;i ++ ){
if (pow( 2.0 ,i) >= n){
cout << i << endl;
break ;
}
}
}
return 0 ;
}
本文介绍了一种用于预测编程竞赛所需轮次的算法。在每轮比赛中,参赛者进行一对一的较量,失败者被淘汰,胜者晋级下一轮,直至决出冠军。文章提供了输入输出样例及C++代码实现,可用于计算不同参赛者数量下所需的竞赛轮数。

8538

被折叠的 条评论
为什么被折叠?



