Sample Input
4
1 2 2 3
Sample Output
1223
1232
1322
2123
2132
2213
2231
2312
2321
3122
3212
3221
分析数据:这里和不含重复数据生成全组合排列代码是不同的,如果使用原代码会出现重复的数据,主要原因是在递归的时候,会把那些重复的数字当作不同的数字利用,而平等对待,直接进行递归。我们要做的就是把相同的数区分出来,我们这里可以引入一个数组mat,专门记录不同的数据,used数组记录每个数字出现的次数。
在递归的时候,因为数组mat的存储是不重复的,进而可以避免出现重复的组合。
又因为used记录的次数,程序可以知道在一个组合中每个数字用的次数,而可以在一个组合中,出现应该出现的重复
#include <iostream>
using namespace std;
const int len = 10;
int n;
int num;
int mat[len];
int result[len];
int used[len];
void push(int varNum);
void solve(int level);
int main()
{
cin>>n;
num=0;
for (int i=0;i<n;i++)
{
int var;
cin>>var;
push(var);
}
solve(0);
system("pause");
retu