-4

r^Nしたがって、順列の総数が得られる N と r を指定して、すべての順列を出力する非再帰関数を作成する方法を知りたいと思います。

Example: N = 3, r = 2, total permutations = 8

output:
000
001
010
011
100
101
110
111

これは私が試したものですが、もちろん1つのケースでしか機能しません:

void perm_iter(int N, int nr_vals){

    int pos = N-1;
    int i,j,k;
    int P_array[N];
    for(i=0;i<N;i++){
        P_array[i] = 0;
    }
    int val_array[nr_vals];
    for(i=0;i<nr_vals;i++){
        val_array[i] = i;
    }

    do{
        for(i=0;i<N;i++){
            for(j=0;j<nr_vals;j++){
                P_array[pos-1] = val_array[j];
                for(k=0;k<nr_vals;k++){
                    P_array[pos] = val_array[k];
                    for(i=0;i<N;i++){
                        printf("%d",P_array[i]);
                    }
                    printf("\n");
                }
            }
            pos--;
        }
    }while(pos > 0);
}
4

2 に答える 2