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

法一:递归求解

首先,我们可以将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;
}
}

感谢各位的关注!