回复 13楼 beyondyf
如果有重复数, 该如何去重呢
程序代码:#include<stdio.h>
void next_permutation(int * s, int len)
{
int i, j, k, t;
for(i = len - 1; i && s[i] <= s[i - 1]; i--);
for(j = i, k = len - 1; j < k; j++, k--){ t = s[j]; s[j] = s[k]; s[k] = t;}
if(!i) return;
for(j = i--, k = len - 1; j < k; s[t] > s[i] ? k = t : (j = t + 1)) t = (j + k) >> 1;
t = s[i]; s[i] = s[k]; s[k] = t;
}
int main()
{
int s[5] = {1, 1, 2, 2, 3}, len = 5, i, j;
for(i = 1; i <= 40; i++, puts(""))
{
printf("%2d : ", i);
for(j = 0; j < len; printf(" %d", s[j++]));
next_permutation(s, len);
}
return 0;
}下面是以上代码的执行结果
程序代码:1 : 1 1 2 2 3 2 : 1 1 2 3 2 3 : 1 1 3 2 2 4 : 1 2 1 2 3 5 : 1 2 1 3 2 6 : 1 2 2 1 3 7 : 1 2 2 3 1 8 : 1 2 3 1 2 9 : 1 2 3 2 1 10 : 1 3 1 2 2 11 : 1 3 2 1 2 12 : 1 3 2 2 1 13 : 2 1 1 2 3 14 : 2 1 1 3 2 15 : 2 1 2 1 3 16 : 2 1 2 3 1 17 : 2 1 3 1 2 18 : 2 1 3 2 1 19 : 2 2 1 1 3 20 : 2 2 1 3 1 21 : 2 2 3 1 1 22 : 2 3 1 1 2 23 : 2 3 1 2 1 24 : 2 3 2 1 1 25 : 3 1 1 2 2 26 : 3 1 2 1 2 27 : 3 1 2 2 1 28 : 3 2 1 1 2 29 : 3 2 1 2 1 30 : 3 2 2 1 1 31 : 1 1 2 2 3 32 : 1 1 2 3 2 33 : 1 1 3 2 2 34 : 1 2 1 2 3 35 : 1 2 1 3 2 36 : 1 2 2 1 3 37 : 1 2 2 3 1 38 : 1 2 3 1 2 39 : 1 2 3 2 1 40 : 1 3 1 2 2
