编程实现:组合_排列

来源:互联网 发布:农产品追溯软件 编辑:程序博客网 时间:2024/05/22 14:19

组合:

1通用方法:

#include <stdio.h>#include <stdlib.h>#define MAX_NUM 26int comb[MAX_NUM];int c1,c2;void combination(int m,int n) {    int i,j;    for (i=m;i>=n;i--) {        comb[n]=i; /* 选择当前的“头”元素 */        if (n>1) {            combination(i-1,n-1); /* 进入下一次更小的组合问题 */        } else { /* 满了需要的组合数,输出 */            for (j=comb[0];j>0;j--) printf("%c",'A'+c1-comb[j]);            printf("\n");        }    }    return;}int main(int argc,char **argv) {    if (argc<3) {        printf("%s 组合下标 组合上标\n",argv[0]);        return 1;    }    c1=atoi(argv[1]);    if (c1<1 || MAX_NUM<c1) {        printf("1<=组合下标<=%d\n",MAX_NUM);        return 2;    }    c2=atoi(argv[2]);    if (c2<1 || c1<c2) {        printf("1<=组合上标<=组合下标\n");        return 3;    }    comb[0]=c2;    combination(c1,c2);    return 0;}

2特殊方法:

int main(){    int i, j, k;    for (i = 1; i <= 5; i++) {        for (j = 1; j <= 5; j++) {            if (j == i) break;            for (k = 1; k <= 5; k++) {                if (k == i || k == j) break;                printf("i = %d, j = %d, k = %d\n", i, j, k);             }           }       }       return 0;}

排列:

n次for循环,每层判断是否相等即可。

原创粉丝点击