85分求助,感觉逻辑没有问题
查看原帖
85分求助,感觉逻辑没有问题
222555
Simon_Lu楼主2022/6/22 23:33
#include<bits/stdc++.h>
using namespace std;
long long n,k;
void calc(long long n,long long k){
    if(n==1){
        k==1?cout<<0:cout<<1;
        return;
    }
    // printf("2^%lld=%lld now=%lld\n",n,(long long)pow(2,n),k);
    if(k>pow(2,n-1)){
        cout<<1;
        calc(n-1,pow(2,n-1)-(k-pow(2,n-1))+1);
    }
    else{
        cout<<0;
        calc(n-1,k);
    }
}
int main(){
    cin>>n>>k;
    calc(n,k+1);
    return 0;
}
//000,001,011,010,110,111,101,100
//00,01,11,10
//0,1
// 4-5+4

说明:calc函数是用来计算当前第n位应该填1还是0,如果大于2^(n-1)就填1,然后递归,否则就填0,然后递归。

2022/6/22 23:33
加载中...