NutzCN Logo
问答 求一个算法
发布于 3343天前 作者 Rekoe 2555 次浏览 复制 上一个帖子 下一个帖子
标签:

有一个字符串比如

abcdefghighlmn

另有传数字

10874

如何随机的把数字和字符串整合成一个 要求数字的顺序不能变
也就是可以是

ab1cd0ef8ghi74ghlmn
8 回复

我知道最简单的做法:
1.拆分字符串为字符,存储到字符串数组。
2.拆分数字为字符,存储到数字数组。
3.遍历数字数组。
4.随机取字符串数组及个数,同时排除己经获取的。

约定1:从a小球中随机取出b个有C(a,b)种组合。
约定2:字符串长度为str_len,数字长度为digt_len,并将数字随机分为n组,有a(n)=C(str_len+1,n)*C(digt_len,n)组合数

第一步:概率均等下产生n
if(digt_len <= str_len){

所有字符串的组合数总共为:count = a(1) + a(2) +...+a(digt_len);
从count中随机取第r = random(count);

已知r反求n 方法:R(n) = { a(1) n = 1 }
{(R(n-1),R(n-1) + a(n)]; n >1 }
如此随机产生的n,就是概率均等的了。
}else{
这种情况自己特殊处理吧
}

第二步:已知n随机产生字符串C(str_len+1,n) * C(digt_len,n)
1.从1~digt_len-1个数中取出 n-1个数,以此为下标分割成n个数字字符串
2.从0~str_len中随机取出n个空挡,将n个数字字符串塞进去

第二步解决的不够完美,不应该再次随机了,应该根据r求出他在C(str_len+1,n) * C(digt_len,n)中的相对坐标
哪些随机数字都是已经固定的,等晚上回去,我给你贴出来。

是字母,和数字,都要保持原有的顺序么
突然想到了一个,用归并算法,判断大小用随机。就随机把两个有序序列合并成一个有序序列了

@是的
是字母,和数字,都要保持原有的顺序

@Rekoe 所以只需要选出位置,然后插入完事

来自炫酷的 NutzCN

我是在字符串的长度下 随机 数字的长度个位置
然后排序位置 把 数字插进去

添加回复
请先登陆
回到顶部