我同一个随机函数得到0~9之间的任意数字然后进行全排列,可是我的这个算法却只能实现无重复数字的全排列,研究了半天没有结果,水平实在有限,希望高手帮我看看。。
#include <stdio.h>
#include <iostream.h>
#include <fstream.h>
#include <time.h>
#include "windows.h"
#include <conio.h>
#define MAX 10 //定义从0到9里随机取数.
int M; //随机取出的数的个数
int deep; //深度
int j=0; //增加一个计数器,跟踪最终排列所在的位置
void swap(int *a,int *b)
{
int temp;
temp=*a;
*a=*b;
*b=temp;
}
void print_it(int arr[])
{
++j;
ofstream fout("D:/test.txt",ios::app); //将结果以文本输出
fout<<j<<":";
for(int i=0;i<M;i++)
fout<<arr[i]<<" ";
fout<<endl;
}
void perm( int arr[], int deep=0)
{
if(deep==M) // 如果已经排到最后
{
print_it(arr); // 打印数组
return;
}
for(int i=deep;i<M;i++) // 对当前位置后的所有位置
{
swap(&arr[deep],&arr[i]); // 交换位置
perm(arr,deep+1); // 递归,继续后面的调用
swap(&arr[deep],&arr[i]); // 在交换回来,保持原有的排列次序
}
}
void main()
{
cout<<"Input the amounts of the data:";
cin>>M;
srand((unsigned)time(NULL)); //srand()函数产生一个以当前时间开始的随机种子
int *Array=new int[M];
for(int i=0;i<M;i++)
{ Array[i]=rand()%MAX; //MAX为最大值,其随机域为0~MAX-1
cout<<Array[i]<<" ";
}
perm(Array,deep=0);
delete []Array;
}
该博客探讨了如何修改一个现有的随机生成0到9之间数字并进行无重复全排列的算法,以实现包含重复数字的全排列。博主遇到了困难,希望得到专家的帮助来解决这个问题,分享了当前的C++代码实现。
1495

被折叠的 条评论
为什么被折叠?



