0

これには少し問題があります。考えられるすべての組み合わせを生成したいと思います。数値は 1D 配列にあり、ファイルから読み取られます。今は問題がわかりません。モニターに出力されるすべての組み合わせが昇順であることはわかっています。一番小さい数字で終わると次の数字に上がらないのが難点。

例: 1,2,3,4,5、n = 5、p = 3 の 1D 配列ファイル。可能な組み合わせ:

1 2 3、1 2 4、1 2 5、1 3 4、1 3 5、1 4 5、2 3 4、2 3 5など...

これが私がこれまでに行ったことです:

#include <stdio.h>
#include <stdlib.h>

void print(int*,int);
void combination(int*,int,int,int);
int main()
{
    FILE *fin = fopen("bemenet.txt","r");
    if(!fin){printf("Error opening file @!!!");return 0;}
    int *a,i,n,p = 3;
    fscanf(fin,"%i ",&n);
    a = (int*)malloc(n*sizeof(int));
    for(i = 0; i < n; ++i){
        fscanf(fin,"%i ",&a[i]);
    }
    combination(a,n,p,0);

    return 0;
}

void combination(int *a,int n,int p,int k)
{
    int i;
    if(k == p){
        print(a,k);
    }
    else{
        for(a[k + 1] = a[k] + 1 ; a[k+1] < n; ++a[k+1]){
            combination(a,n,p,k+1);
        }
    }
}
void print(int *a,int k)
{
    int i;
    for(i = 0; i < k; ++i){
        printf("%i ",a[i]);
    }
    printf("\n");
}
4

1 に答える 1