天平2之3进制的货币系统

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;
}

​

 

 

  • 13
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值