数字排序
譬如有5个数,如何才能全部输出,由其中三个不重复的数字构成的排序呢
程序代码:#include <stdio.h>
int print_a(int a[], int l) {
int i;
for (i = 0; i < l; i++) {
printf("%d ", a[i]);
}
printf("\n");
return 0;
}
int next_permutation(int p[], int l) { // 这个函数用来求下一个排列
int i, j = -1, k;
for (i = 0; i < l - 1; i++) {
if (p[i] < p[i + 1]) {
j = i;
}
}
if (j == -1) {
return 0;
}
for (i = l - 1; p[i] <= p[j]; i--);
k = p[i];
p[i] = p[j];
p[j] = k;
for (i = 1; i <= (l - j) / 2; i++) {
k = p[j + i];
p[j + i] = p[l - i];
p[l - i] = k;
}
return 1;
}
int main() {
int p[5], a[3], i, j, k;
printf("Give me 5 integers: ");
for (i = 0; i < 5; i++) {
scanf(" %d", &p[i]);
}
for (i = 0; i < 5; i++) { // 对输入的数字进行升序排列
for (j = i + 1; j < 5; j++) {
if (a[j] < a[i]) {
k = a[i];
a[i] = a[j];
a[j] = k;
}
}
}
print_a(p, 5);
for (i = 0; i < 3; i++) {
for (j = i + 1; j < 4; j++) {
for (k = j + 1; k < 5; k++) {
a[0] = p[i];
a[1] = p[j];
a[2] = p[k];
print_a(a, 3);
while (next_permutation(a, 3)) { // 这样就可以求一个升序列表的中各项的全排列
print_a(a, 3);
}
printf("\n");
}
}
}
return 0;
}