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;
}
}
感谢各位的关注!