某个公司举行一场羽毛球赛,有1001个人参加,现在为了评比出“最厉害的那个人”,进行淘汰赛,请问至少需要进行多少次比赛。
/**
* 某个公司举行一场羽毛球赛,有1001个人参加,现在为了评比出“最厉害的那个人”,
* 进行淘汰赛,请问至少需要进行多少次比赛。
* @author 健身小码哥
*
*/
public class BestPlayer {
/**
* 递归求解比赛场次
* @param playerCount
* @return
*/
public int getMinGameCount_Recursively(int playerCount)
{
if(playerCount <= 1)
{
return 0;
}
if(playerCount == 2)
{
return 1;
}
return (playerCount % 2 == 0) ?
(playerCount/2 +getMinGameCount_Recursively(playerCount/2)):
(playerCount/2 +getMinGameCount_Recursively(playerCount/2 + 1));
}
/**
* 递归求解比赛场次
* @param playerCount
* @return
*/
public int getMinGameCount_Iteratively(int playerCount)
{
if(playerCount <= 1)
{
return 0;
}
if(playerCount == 2)
{
return 1;
}
int minArray[] = new int[playerCount+1];
minArray[0] = 0;
minArray[1] = 0;
minArray[2] = 1;
for(int i = 3 ; i <= playerCount ; i++)
{
minArray[i] = i % 2 == 0 ?
minArray[i/2] * 2 + 1 :
minArray[i/2] * 2 + 2;
}
return minArray[playerCount];
}
public static void main(String[] args) {
int min = new BestPlayer().getMinGameCount_Iteratively(1001);
System.out.println(min);
}
}