Teams Match题解

Teams Match

http://www.nowcoder.com/questionTerminal/3e5f3c78acef45f89711912420122f8c

这道题,真的是水题。在这里我来说两个方法。本人认为法二更简单不要跳呀

法一:递归求解

首先,我们可以将N枚举几个试试看。我们定义g(x)为有x个球队的比赛场数。

当x为偶数时,容易得出:g(x)=g(x/2)+x/2;

当x为奇数时,容易得出:g(x)=g(x-1);

当x=1时,g(x)=0;

所以,我们可以写出g(x)的函数:

int g(int k){
if(k==1) return 0;
if(k%2==0) return g(k/2)+k/2;
else return g(k-1)+1;
}

所以,本人代码如下:

include

using namespace std;
int g(int k){
if(k==1) return 0;
if(k%2==0) return g(k/2)+k/2;
else return g(k-1)+1;
}
int main(){
int n;
while(cin>>n){
cout<<g(n)<<endl;
}
}

法二:通过法一找规律

我们通过数学推理,可发现本人在这里省略推理过程,g(x)=x-1;

所以本人代码如下:

include

using namespace std;
int main(){
int n;
while(cin>>n){
cout<<n-1<<endl;
}
}

感谢各位的关注!

全部评论

相关推荐

11-09 11:01
济南大学 Java
Java抽象带篮子:外卖项目真得美化一下,可以看看我的详细的外卖话术帖子
点赞 评论 收藏
分享
1 收藏 评论
分享
牛客网
牛客企业服务