c++随机选出4个元素排列组合
规定数组中包括数字,大小写字母,以及特殊符号,然后随机取出4个元素可以重复,要求要产生所有可能的的排列,然后将每一种排列放入txt文件里,应该怎么做呢,最好可以有源代码,...
规定数组中包括数字,大小写字母,以及特殊符号,然后随机取出4个元素可以重复,要求要产生所有可能的的排列,然后将每一种排列放入txt文件里,应该怎么做呢,最好可以有源代码,谢谢
展开
展开全部
思路:随机选择 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;
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询