avatar
问个题目:数字组合# JobHunting - 待字闺中
i*e
1
设有个N位数,其中有“0” N0个, "1" N1个,..."i" Ni个,..., "9" N9个
0<=Ni <= N 且 sum(Ni : i from 0 to 9) = N
请中,有多少个由这些数字组成的数在范围[a, b]中, B的位数可能大于N(此时可随意
添加0的个数)
比如
1022, 其中有1 1个, 0 1个,2 2个
如果a= 1000, b = 20000则 1202, 2012, 10220, 12020等都是备选
不知道说清楚没
avatar
p*2
2
最简单的解法就是brute force,如果b不大的话。
要不就把所有的排列得出来,后边再加0。
avatar
i*e
3
要是b很大呢,似乎两种方法都太耗时了

【在 p*****2 的大作中提到】
: 最简单的解法就是brute force,如果b不大的话。
: 要不就把所有的排列得出来,后边再加0。

avatar
p*2
4

你这题是从哪里来的?a,b的范围多大?

【在 i*****e 的大作中提到】
: 要是b很大呢,似乎两种方法都太耗时了
avatar
i*e
5
一朋友问的,觉得是到数学题,呵呵
应该可以用排列组合的理论来解,但是想不到好方法
1<= a <= b <= 2^64 or 2^128
avatar
p*2
6

数学题我不擅长,等着数学博士过来看看吧。

【在 i*****e 的大作中提到】
: 一朋友问的,觉得是到数学题,呵呵
: 应该可以用排列组合的理论来解,但是想不到好方法
: 1<= a <= b <= 2^64 or 2^128

avatar
a*o
7
二爷求加俱乐部!

【在 p*****2 的大作中提到】
:
: 数学题我不擅长,等着数学博士过来看看吧。

avatar
C*U
8
可以这样。找到和a最接近但是比a大的组合。 找到和b最接近但是比b小的组合
用nextpremutation来找出之间的数
找那两个数应该都用o(n)时间
加上nextpermutation们的时间

设有个N位数,其中有“0” N0个, "1" N1个,..."i" Ni个,..., "9" N9个0
★ Sent from iPhone App: iReader Mitbbs 7.56 - iPad Lite

【在 i*****e 的大作中提到】
: 设有个N位数,其中有“0” N0个, "1" N1个,..."i" Ni个,..., "9" N9个
: 0<=Ni <= N 且 sum(Ni : i from 0 to 9) = N
: 请中,有多少个由这些数字组成的数在范围[a, b]中, B的位数可能大于N(此时可随意
: 添加0的个数)
: 比如
: 1022, 其中有1 1个, 0 1个,2 2个
: 如果a= 1000, b = 20000则 1202, 2012, 10220, 12020等都是备选
: 不知道说清楚没

avatar
i*e
9
恩,应该可以试一试
之前用python试了一把,python的permutation函数不区分重复数字,candidates太多.
..
貌似stl的next_permutation可以

【在 C***U 的大作中提到】
: 可以这样。找到和a最接近但是比a大的组合。 找到和b最接近但是比b小的组合
: 用nextpremutation来找出之间的数
: 找那两个数应该都用o(n)时间
: 加上nextpermutation们的时间
:
: 设有个N位数,其中有“0” N0个, "1" N1个,..."i" Ni个,..., "9" N9个0
: ★ Sent from iPhone App: iReader Mitbbs 7.56 - iPad Lite

avatar
g*s
10
以前好像做过类似的,不过没有可以随便加0这个条件。
基本思路就是固定头几位,后面数字不影响的时候直接用排列公式来算。
例如 012355,[124001,315506]
10*全排除
12[03]*全排除
125* 全ok 直接计算035的全排列树目。
2* 全ok 直接计算01355的全排列树目。
30* 全ok 直接计算1255的全排列树目。
310 全ok
312 全ok
3150
。。。
复杂度是数字的长度.
这题0可以随便加,指的是加到最后吧。一样的思路可以解。

【在 i*****e 的大作中提到】
: 设有个N位数,其中有“0” N0个, "1" N1个,..."i" Ni个,..., "9" N9个
: 0<=Ni <= N 且 sum(Ni : i from 0 to 9) = N
: 请中,有多少个由这些数字组成的数在范围[a, b]中, B的位数可能大于N(此时可随意
: 添加0的个数)
: 比如
: 1022, 其中有1 1个, 0 1个,2 2个
: 如果a= 1000, b = 20000则 1202, 2012, 10220, 12020等都是备选
: 不知道说清楚没

相关阅读
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。