世界上最好理解的代码:
#include<bits/stdc++.h>
using namespace std;
int n,num,ans,a[1010];
void dfs(int k,int sum){
if(k==num){
ans+=2*sum-n+2;
return;
}
for(int i=ceil((n+1)*1.0/(1<<(num-k))-1-sum);i<=sum+1;i++){
a[k]=i;
dfs(k+1,sum+i);
}
}
int main(){
scanf("%d",&n);
if(n==1){
printf("1 1");
return 0;
}
int s=1,ss=0;
while(s<n){
num++;
ss+=s;
s=ss+1;
}
a[1]=1;
dfs(2,1);
printf("%d %d",num,ans);
return 0;
}