按下列要求生成一些长度为 10 位的十六进制数。

104 天前
 wulilele

大佬们,我来虚心请教一个问题。 按下列要求生成一些长度为 10 位的十六进制数。 1 、每一位的范围:根据给定的数位的值限制,每一位的取值范围应该是 1 到该位的最大值。 即:每个位最小为 1 ,且有一个最大数的限制,比如个位限制最大为 4 ,十位限制最大为 5 。用一串数字表示从低位往高位的限制最大值,依次为 4 ,5 ,5 ,5 ,5 ,5 ,5 ,5 ,5 ,7 。 2 、重复元素比例:生成结果中任意两个数对应位的重复元素不超过 30%。 3 、多样性:生成的所有数,相同位上的数字尽可能多样。即个位上应该尽可能均匀的出现 1 到 4 ,避免仅使用 1 到 3 ,未使用 4 的情况。 如何求解出可生成满足上述条件的数字总个数,并枚举出一个符合条件的组合。

如果要求上的 10 位 16 进制变为动态的,比如 n 位 m 进制,每位限制最大值依次为 a1,a2,a3,...,允许的重复率为 p%,如何给出一个通用的计算方案。

1692 次点击
所在节点    程序员
13 条回复
lsk569937453
104 天前
课后作业自己完成。v2 的老哥们只是热心,不喜欢被白嫖的。
XXWHCA
104 天前
有问题就去问老师啊,我们又不会讲课
hzdzyx
104 天前
此问题可以采用计算机编程的方法来解决,这里提供一种算法的思路:
对于固定长度的十六进制数问题:
首先对于每一位都是独立的,所以可以单独计算。
根据限制数组生成每一位上可能出现的数字。
使用回溯算法枚举所有可能的数,同时满足重复元素不超过 30%和多样性要求。
具体步骤:a. 初始化一个列表以存储每一位可能的取值。b. 基于列表生成所有可能的组合。c. 应用 30%的重复元素比例限制条件进行筛选。d. 验证筛选后的组合在多样性上的分布是否均匀。
生成数字总个数的算法:
对于每一位,其可能出现的数字种数是该位的限制值,所以只要将每一位的种数相乘即可得到总数。
对于动态长度 n 位 m 进制数的问题,则算法需要按以下步骤进行扩展:
动态生成每一位可能的取值范围列表。
使用类似于回溯的方法枚举所有可能的数。
对于重复率的限制,计算每一位上允许的最大重复数目,可以通过公式( n * p%)计算得到。
多样性的保证可以通过轮流选择每一位上的不同数字来实现。
具体算法通用方案:a. 根据输入的 n (位数), m (基数), a1..an (每位的限制), p% (重复率),创建每一位的可能取值数组。b. 枚举所有可能的组合,可以使用迭代或递归方法。c. 在枚举的过程中使用一个辅助数据结构(如哈希表)来记录当前已经使用过的组合,以便满足重复率约束。d. 枚举过程需要注意在达到边界条件时进行剪枝,即如果某位上数字的重复次数超过了限制,则放弃这条分支的进一步搜索。e. 可以通过计数器来确保多样性的保持,例如在每一位的轮流过程中,保证每个数字出现的次数相近。
最后,根据枚举的结果计算组合总数。对于重复率的计算,需要额外的统计步骤,以保证不同组合之间的约定重复率不被超过。
这个问题的解不唯一,所采取的算法可能随着实际情况的不同而调整。在实现时,可以根据具体要求来选择不同的优化方法,比如动态规划、分治策略等。这是一个计算机程序设计问题,如果要获得精确解,需要编写具体的代码。在实际应用中,也可能需要考虑算法效率和执行时间。
bingobang
104 天前
问 gpt 啊,他能直接给出 c++的代码
wulilele
104 天前
抱歉啊~,我的提问方式有问题。只是觉得一个有趣的问题供大家摸鱼消遣,感兴趣的可以瞅一眼,不需要给出任何结果
Vegetable
104 天前
最大位数都是 7 了,和 16 进制还有毛线关系,这不是 8 进制了吗
CivAx
104 天前
@hzdzyx #3 粘贴 AI 回复被举报即刻击毙。https://v2ex.com/t/1000198#reply62
Charbo
104 天前
@CivAx 不只是 AI 回复,这帖子里所有高赞的都 404 了,细思极恐
xiaowowo
104 天前
@Charbo 这就是权利的魅力。
phpfpm
104 天前
这问题一点也不有趣
kneo
104 天前
问题表达的这么专业,我不相信是你自己想出来的问题。
关键,我也不觉得这是一个有趣的问题。所以算了吧。
Takashi123
104 天前
但是虚心是这么用的么?
MiketsuSmasher
102 天前
是学小易解决不了你的期末作业了,所以跑到这里来问了吗?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1011361

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX