c++随机选出4个元素排列组合

规定数组中包括数字,大小写字母,以及特殊符号,然后随机取出4个元素可以重复,要求要产生所有可能的的排列,然后将每一种排列放入txt文件里,应该怎么做呢,最好可以有源代码,... 规定数组中包括数字,大小写字母,以及特殊符号,然后随机取出4个元素可以重复,要求要产生所有可能的的排列,然后将每一种排列放入txt文件里,应该怎么做呢,最好可以有源代码,谢谢 展开
 我来答
爱说真话的小丑
2014-11-25 · TA获得超过943个赞
知道小有建树答主
回答量:866
采纳率:0%
帮助的人:286万
展开全部
思路:随机选择 4 个元素比较简单,但是要达到产生所有可能的的排列,不能用这种方法。比较好的方法是:将全部的排列列出并编号,然后随机选择这些编号。具体代码要些时间写,如果有需要,等我有空的时候可以写出来给你。
追问
那您什么时候有时间?项目马上要结题了
追答
//按字典升序生成全部的排列数。基数为 0
void AllPermutationsNumbers(int N, int M, short **ppAll)
{
//计算排列数
long cnt = 1, i, j;
for (i = 1; i <= M; i++)
cnt *= N;
//按字典顺序生成排列数
short *pch_tmp;
pch_tmp = new short[M];
//初始化为 0
for (i = 0; i < M; i++)
pch_tmp[i] = 0;
int M_1 = M - 1, N_1 = N - 1; //提高运算效率
long cur = 0, ptrCurColumn = M_1;
short k;
while (cur < cnt)
{
if (ptrCurColumn == M_1)
{// ptrCurColumn 指向最后一列
for (j = 0; j < N; j++)
{
pch_tmp[M_1] = (short)j;
//保存排列结果
for (k = 0; k < M; k++)
ppAll[cur][k] = pch_tmp[k];
cur++;
}
ptrCurColumn--; //当前列指针前移一位
}
else
{
if (ptrCurColumn == M || ptrCurColumn < 0)
{ //测试
k = 0;
}
if (pch_tmp[ptrCurColumn] == N_1)
{// 当前列已经排到了顶
ptrCurColumn--; //当前列指针前移一位
}
else
{
pch_tmp[ptrCurColumn]++;
for (j = ptrCurColumn + 1; j < M; j++)
pch_tmp[j] = 0; //后面的又从 0 开始
ptrCurColumn = M_1;
}
}
}
delete[] pch_tmp;
}
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式