首页 > 其他分享 >天平2——三进制的货币系统

天平2——三进制的货币系统

时间:2024-07-01 18:58:04浏览次数:3  
标签:进制 int 天平 钱币 num 货币 面值 string 总和

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小的,它是选择了哪些钱币?

Input

一行给出一个数字k,1<N<=10^6

Output

输出若干行,每行输出一个数字,数字从小到大。

思路:

        因题目限定为每种钱币只能是一张,也就是说某个数转为三进制后,只要找出该数中每位数字上的“1”,然后进行以3为底的幂次运算,即可达到题目要求的钱币组合。但问题的关键是如何找出第K小的数?同样由于题意,每种钱币只能使用1张或0张的组合,这就将问题变成了:一个n位的数,每位数只能使用0或1的排列组合方式,从小到大排列就是0、1、10、11、100、101......这就相当于是从小到大的二进制排列。刚好符合题意中的第K小的数,需要注意的是0变成了第一小,那么第K小就是K-1。分解K-1为二进制序列,再将该序列不同数位上的“1”进行以3为底、数位顺序为幂次进行幂运算即为答案!

AC代码:

#include<bits/stdc++.h>
using namespace std;
int pow(int a, int b) { //快速幂函数
	int res =  1;
	while (b > 0) {
		if (b & 1) res *= a;
		b >>= 1;
		a *= a;
	}
	return res;
}
string Binary(int num) { //位操作将一个数分解为二进制数为字符串形式
	string bit, s = "";
	while (num > 0) {
		bit = to_string( num & 1); // 获取最低位
		s += bit ;
		num >>= 1; // 右移一位
	}
	return s;
}
int main() {
	int n;
	cin >> n;
	string bStr = Binary(n - 1); //返回逆序的二制字符串
	for (int i = 0; i <= bStr.length(); ++i) //计算3的幂次
		if (bStr[i] == '1')
			cout << pow(3, i) << endl;
	return 0;
}

标签:进制,int,天平,钱币,num,货币,面值,string,总和
From: https://blog.csdn.net/Ricky_One/article/details/140101004

相关文章

  • Linux下二进制可执行文件分析 (nm,readelf,objdump 命令使用)
    最近在调试一些问题,发现几个命令很实用,记录一下。一 背景    也许大家都遇到过这种场景,就是有二进制代码,比如深度分析下此文件到底是什么格式的图片等,这篇文章就记录我分析下二进制可执行文件的过程,已经自己读写二进制文件的一些坑。分析的二进制执行文件为linux下......
  • 基于二进制软件包 —安装 MySQL-8.0.28
    #!/bin/bash##********************************************************************#Author: Kevin#Date: 2024-06-23#FileName: install_mysql.sh#Description: Thetestscript#Copyright(C): 2024Allrightsreserved#****************************......
  • MySQL-5.7.38 基于二进制包一键安装脚本
    #!/bin/bash##********************************************************************#Author: Kevin#Date: 2024-06-23#FileName: install_mysql.sh#Description: Thetestscript#Copyright(C): 2024Allrightsreserved#****************************......
  • 进制
    一、1.八进制2.将十进制重新定义,别人不理解真正的含义3.二进制转换0101是50101分别代表的是二的三次方,二的二次方,二的一次方,二的零次方二的零次方有数为一,则算二的零次方=1二的一次方有零,则就=0二的二次方为一,则二的二次方=4三次方为零,就为0在相加1+0+4+0=54.八进制......
  • C++数据格式化5 - uint转换成十六进制字符串&二进制的data打印成十六进制字符串
    1.关键词2.strfmt.h3.strfmt.cpp4.测试代码5.运行结果6.源码地址1.关键词关键字:C++数据格式化字符串处理std::stringinthex跨平台应用场景:int型的数据打印成十六进制字符串二进制的data打印成十六进制字符串。2.strfmt.h#pragmaonce#include<stri......
  • 银行与货币供给
    经济学原理-微观经济学分册(第7版)1.银行准备金个人持有的货币量=通货(钱包中的钞票和硬币)+活期存款银行得到且没贷出去的存款称为准备金(reserves),银行如果所有存款都用于准备金,则不影响货币供给。部分准备金银行(fractional-reservebanking)制度,需按照规定保持一定......
  • C++数据格式化6 - uint转换成二六进制字符串
    1.关键词2.strfmt.h3.strfmt.cpp4.测试代码5.运行结果6.源码地址1.关键词C++数据格式化字符串处理std::stringintbin跨平台2.strfmt.h#pragmaonce#include<string>#include<cstdint>#include<sstream>#include<iomanip>namespacecutl{......
  • C++数据格式化5 - uint转换成十六进制字符串&二进制的data打印成十六进制字符串
    1.关键词2.strfmt.h3.strfmt.cpp4.测试代码5.运行结果6.源码地址1.关键词关键字:C++数据格式化字符串处理std::stringinthex跨平台应用场景:int型的数据打印成十六进制字符串二进制的data打印成十六进制字符串。2.strfmt.h#pragmaonce#include<......
  • 远光九天平台荣获2024广东软件风云榜行业应用解决方案TOP10
    6月13日,远光九天智能一体化云平台(简称:远光九天平台)在2024年粤港澳软件产业高质量发展大会、第十二届粤港云计算大会暨第七届粤港澳ICT大会,被授予2024广东软件风云榜“行业应用解决方案TOP10”奖项。  作为远光软件自主研发的全栈国产化技术底座,远光九天平台是采用云原生架......
  • verilog实现格雷码和二进制码的相互转换
    目录格雷码的介绍二进制码转化为格雷码格雷码转化为二进制码verilog实现代码格雷码的介绍在一组数的编码中,若任意两个相邻的代码只有一位二进制数不同,则称这种编码为格雷码(GrayCode),另外由于最大数与最小数之间也仅一位数不同,即“首尾相连”,因此又称循环码或反射码。在数字系统......