Description
J王国的货币非常奇怪,面值都是3的若干次方 即面值为1,3,9,27,81......... 国王现在发现这些货币,每种只有一张这样的钱。 于是国王发现从这些钱中先任意组合,再加钱的面值相加得到一个总和的话
则面值最小的为空集,也就是说一张钱也不要
面值第2小的为{1},总和为1
面值第3小的为{3},总和为3
面值第4小的为{1,3},总和为4
面值第5小的为{9},总和为9
面值第6小的为{1,9},总和为10
面值第7小的为{3,9},总和为12
现在问你面值第K小的,它是选择了哪些钱币
Format
Input
一行给出一个数字k,1<N<=10^6
Output
输出若干行,每行输出一个数字,数字从小到大
Samples
输入数据 1
4
Copy
输出数据 1
1
3
思路
因为对于一张货币只有选和不选,所以本质是一个二进制。
代码见下:
#include<bits/stdc++.h>
using namespace std;
int d=1e7;
bool f[10000001],p[10000001];
int z[100000001],sd,g[10000000],o[100000001],l[10000001];
int n,m,mo=1e9+7,nd=1e7+1,q;
long long kk,dc;
int s,c;
int main(){
cin>>n;
int j=1;
n--;
while(n!=0){
if(n%2==1){
if(n!=0){
cout<<j<<endl;
}
else{
cout<<j<<endl;
}
}
n/=2;
j*=3;
}
return 0;
}
#include<bits/stdc++.h>
using namespace std;
int d=1e7;
bool f[10000001],p[10000001];
int z[100000001],sd,g[10000000],o[100000001],l[10000001];
int n,m,mo=1e9+7,nd=1e7+1,q;
long long kk,dc;
int s,c;
int main(){
cin>>n;
int j=1;
n--;
while(n!=0){
if(n%2==1){
if(n!=0){
cout<<j<<endl;
}
else{
cout<<j<<endl;
}
}
n/=2;
j*=3;
}
return 0;
}
#include<bits/stdc++.h>
using namespace std;
int d=1e7;
bool f[10000001],p[10000001];
int z[100000001],sd,g[10000000],o[100000001],l[10000001];
int n,m,mo=1e9+7,nd=1e7+1,q;
long long kk,dc;
int s,c;
int main(){
cin>>n;
int j=1;
n--;
while(n!=0){
if(n%2==1){
if(n!=0){
cout<<j<<endl;
}
else{
cout<<j<<endl;
}
}
n/=2;
j*=3;
}
return 0;
}
#include<bits/stdc++.h>
using namespace std;
int d=1e7;
bool f[10000001],p[10000001];
int z[100000001],sd,g[10000000],o[100000001],l[10000001];
int n,m,mo=1e9+7,nd=1e7+1,q;
long long kk,dc;
int s,c;
int main(){
cin>>n;
int j=1;
n--;
while(n!=0){
if(n%2==1){
if(n!=0){
cout<<j<<endl;
}
else{
cout<<j<<endl;
}
}
n/=2;
j*=3;
}
return 0;
}