分离数字的python编码_把数字拆分成2的幂的和
问题:
任何数都能分解成2的幂,比如
7=1+1+1+1+1+1+1
=1+1+1+1+1+2
=1+1+1+2+2
=1+2+2+2
=1+1+1+4
=1+2+4
共有6种分解方式,设f(n)为任意正整数可能分解总数,比如f(7)=6
写个算法,输入数,求出其分解的总数。
思路:
先按照树形结构,把一个数可能的2的幂的子数记录下来,比如7拆分成7个1,3个2,1个4。从高到底遍历所有可能的搭配。
import math
import copy
def get_distribute_for_number(number):
distribute = {}
distribute[0] = number
for i in range(0, int(math.log(number, 2) + 1)):
if i not in distribute:
break
count_i = distribute[i]
while count_i >= 2:
count_i -= 2
if i + 1 not in distribute:
distribute[i + 1] = 0
distribute[i + 1] += 1
return distribute
def count_by_distribute(distribute, number, parent_expr):
if number == 0:
print("expr : %s"%parent_expr[:-3])
return 1
max_leaf = len(distribute) - 1
if max_leaf == 0:
print("expr : %s"%(parent_expr + " 1 * %d"%number))
return 1
curr_distribute = copy.copy(distribute)
max_leaf_value = 2 ** max_leaf
max_leaf_num = curr_distribute.pop(max_leaf)
count = 0
for i in range(0, max_leaf_num + 1):
left = number - max_leaf_value * i
expr = parent_expr
expr += "%d * %d"%(max_leaf_value, i)
expr += " + "
if left < 0:
break
count_left = count_by_distribute(curr_distribute, left, expr)
count += count_left
#print("current distribute is ")
#print(curr_distribute)
#print("kept %d leaves of %d"%(i, max_leaf_value))
#print("distributing num for %d is %d"%(left, count_left))
return count
number = input("Input Number:")
distribute = get_distribute_for_number(number)
print("Distribute for num is")
print(distribute)
count = count_by_distribute(distribute, number, "")
print("Number %d can be distributed by %d ways"%(number, count))
分离数字的python编码_把数字拆分成2的幂的和相关推荐
- python数字类型-Python基础:数据类型-数字(5)
在Python中,所有的数据类型都是类,每一个变量都是类的实例. Python中有6种标准数据类型:数字(Number).字符串(String).列表(List).元组(Tuple).集合(Sets) ...
- 怎么将一个数字高低位互换_多彩数字 多彩童年——东城幼儿园玩具研究教学案例...
玩具是儿童的天使,孩子在天使的陪伴下,创造性地进行着自己的游戏活动.在幼儿众多的玩具中怎样甄别一款好玩的玩具,挖掘出玩具的最大教育价值,让他们在和玩具的互动中快乐地学习呢?下面,我们来看看老师们是怎样 ...
- 数字盲打怎么练_会计数字键盘盲打技巧
1 会计 数字键盘盲打技巧 以下是会计数字键盘盲打技巧等等的介绍,希望可以为您提供帮助. 数字小键盘区(又名'辅助键区')位于键盘的右下方,主要用于快速输入数字,并加以编辑处理.它特别适合于经常与数字 ...
- python猜数字统计游戏次数_猜数字游戏(Python)
在Python3中工作.在 我对Python还比较陌生(只有几个星期的知识).在 这个程序给我的提示是写一个随机数游戏,用户必须猜出随机数(1到100之间),如果不正确,就会提示它太低或太高.然后用户 ...
- python数字转拼音输出_将数字拼音转换为带声调的拼音
我有一些python3代码可以做到这一点,它足够小,可以直接放在这里的答案中.在PinyinToneMark = { 0: "aoeiuv\u00fc", 1: "\u0 ...
- java猜数字游戏应用程序_猜数字游戏的Java小程序
/* 猜数字游戏: 1,产生随机数. 2,获取键盘录入. 3,将录入数据变成数字,和随机数比较. 给出提示信息. 4,重复这个过程,如果猜中,程序就结束. 注意:对于输入1~100以外的数字,,以及非 ...
- java将数字替换为空_将数字替换为java中正确位置的单词
实际上我正试图用用户给出的句子中的数字替换为单词.本案例日期格式;例如:我的生日是在16/6/2000,我是 java的新手 – >成为->我的生日是七月十六日,我是java的新手 这是代 ...
- 有重复数字的组合问题_带数字重复的组合和问题
有重复数字的组合问题 Description: 描述: This is a standard interview problem to make some combination of the num ...
- 为什么python的命名不能以数字开头,Python模块名称以数字开头
When I try to import a module in python(.py file) it gives a syntax error. The module name starts wi ...
最新文章
- 性别从后台获取得值的那点事儿
- 登录centos虚拟机后显示-bash-4.1
- 使用Spring编写和使用SOAP Web服务
- python七巧板三角形_用七巧板拼出14种三角形,这才是图形认知的神器!
- 伴随我成长的编程书,赶紧收藏!!
- springboot完成进度条_Springboot从0开始第一周
- 谷歌中巨大的 SEO 骗局!排名靠前的 HTML 编辑器也不可信
- 人人商城小程序服务器根目录,人人商城小程序前端怎么安装?人人商城小程序如何配置实用...
- 星环inceptor建表公式以及各个表的区别联系
- Docker的bridge和macvlan两种网络模式
- linux移动到回收站快捷键,linux中使用rm命令将文件移到回收站的方法
- 使用excel、python、tableau对招聘数据进行数据处理及可视化分析
- 就在那犹豫的一刹那,跌入那深渊
- php 泊松分布,关于检验泊松分布
- SpringBooot
- 1-系统C盘迁移到新买的固态硬盘SSD中有影响但不主要,但有必要将系统盘C盘迁移到新安装的 固态硬盘SSD中吗?
- 安卓flash插件_Flash 终将谢幕:微软将于年底停止对 Flash 的支持
- 联通物联卡为什么没有网络_物联网卡显示3g 联通物联网
- P/NP/NP完全/NP难问题
- 猪哥学习群直播第一期:人工智能在银行电信企业中的应用
热门文章
- 国际象棋java_国际象棋源代码-JAVA
- good man or bad man?
- YOLO v5 检测摄像头但却不显示检测图像 一招拿下
- ChromeDriver与Chrome版本对应关系及下载链接
- 现代诗与古典传统的关系
- 苏州职业大学计算机考试成绩查询系统,苏州工业园区职业技术学院教务管理系统登录入口、成绩查询网上选课查分...
- 扶不起的优酷,做不好的阿里大文娱,路远!
- 如何将PDF删除水印?PDF删除水印的方法
- 【Pytorch深度学习50篇】·······第六篇:【常见损失函数篇】-----BCELoss及其变种
- 服务器如何安装虚拟机,服务器如何安装虚拟机