-1

再帰関数の操作に問題があるので、私の問題は、ゴールデンコインを表す配列があることです。この配列には、長期的にすべてのユーザーが取得する方法で2人のユーザーと共有する必要のあるコインがあります。同量の金または最良の解決策...このように

Gold
10 6 5 2
User A : gets 10 2
User B : gets 6 5

ユーザーAとユーザーBの間の絶対値は、私に違いを与えます。この場合は1になります

この問題を解決するには、利用可能なすべての組み合わせを実行する必要があります。そのため、ブルートフォースと再帰関数を使用します。これを行うには、すべての組み合わせを実行し、前の組み合わせよりも優れている場合は、2つの組み合わせの絶対差を確認する必要があります。グローバル変数に保存するのが最適です...

問題は、機能がまったくうまく機能していないことです..あなたが私を助けてくれれば私は感謝されます...

コードは以下のとおりです。

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

int best = 0; // keeps the best option



int share_friends_recursive(int nelems,int a[],int friend_a,int friend_b,int i){
    int sub = 0;
    friend_a += a[i];
    friend_b += a[i+1];
    if(i+1 == nelems){

        return 0;
    }else{
        sub = abs(friend_a - friend_b);
        if(sub < best){
            best = sub;
        }
        i++;
        share_friends_recursive(nelems,a,friend_a,friend_b,i);
    }

}

int main(int argc, char *argv[]) {
    //
    int nelems = 4;
    int a[] = {10,6,5,2};



    //friend A can get the first value
    // friend B gets the second one ...
    share_friends_recursive(nelems,a,0,1,0);
    printf("%d \n",best);

    return 0;
}
4

1 に答える 1