数字排序
譬如有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; }