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");
return 0;
}
/*----------------------
操作的目的:生成一个数据全不重复的数组,并记录每个数出现的次数
初始条件:
n:记录选取数据的总长度
操作结果:
num:记录不重复数的个数(mat

本文探讨如何在存在重复数字的情况下生成不重复的组合排列。通过引入一个数组mat来存储不重复的数据,并使用used数组记录每个数字出现的次数,递归过程中避免了重复组合的产生。这种方法确保在每个组合中,重复数字按预期出现。
最低0.47元/天 解锁文章
900

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



