2017-07-27 4 views
0

残りのコインを最小限の数だけ返すプログラムを作成しています。入力に私はコインカットとその金額のセットを持っています。私は慎重に動作するJavaクローンをやった。今私はそれをC言語にする必要があります。私はそれほど準備ができていない言語です。誰でも助けてくれますか? 私の主な問題は、結果をCに返す方法です。javaは、配列全体のリストとして返されます。これらのように:[1、0、0、1、0]C言語のプログラムにJavaクラスを変換

import java.util.ArrayList; 
import java.util.Arrays; 
import java.util.List; 

public class Change { 
int[] values = {10,20,50,100,200}; 

public static void main(String[] args) { 
    int[] values = {7, 2, 3, 6, 0}; 
    int[] ammounts = {1, 1, 1, 1, 0}; 
    List<Integer[]> results = solutions(values, ammounts, new int[5], 13, 0); 
    for (Integer[] result : results){ 
     System.out.println(Arrays.toString(result)); 
    } 


} 

public static List<Integer[]> solutions(int[] values, int[] ammounts, int[] variation, int price, int position){ 
    List<Integer[]> list = new ArrayList<>(); 
    int value = compute(values, variation); 
    if (value < price){ 
     for (int i = position; i < values.length; i++) { 
      if (ammounts[i] > variation[i]){ 
       int[] newvariation = variation.clone(); 
       newvariation[i]++; 
       List<Integer[]> newList = solutions(values, ammounts, newvariation, price, i); 
       if (newList != null){ 
        list.addAll(newList); 
       } 
      } 
     } 
    } else if (value == price) { 
     list.add(myCopy(variation)); 
    } 
    return list; 
} 

public static int compute(int[] values, int[] variation){ 
    int ret = 0; 
    for (int i = 0; i < variation.length; i++) { 
     ret += values[i] * variation[i]; 
    } 
    return ret; 
} 

public static Integer[] myCopy(int[] ar){ 
    Integer[] ret = new Integer[ar.length]; 
    for (int i = 0; i < ar.length; i++) { 
     ret[i] = ar[i]; 
    } 
    return ret; 
} 

}

これは一瞬のために私のコードです:

​​

MY STRUCT:

struct coin { 
    unsigned int value_coin; // value money 
    unsigned int number_coin; // amount money 
}; 

struct rest { 
    unsigned int max_lenght; 
    struct coin *coin; 
}; 

struct variation { 
    int lenght; 
    int *variation; 
}; 

struct final_list { 
int lenght; 
variation *variation; 
}; 
+0

あなたは何を試しましたか? –

+0

私の質問を編集する –

+0

[MCVE](http://stackoverflow.com/help/mcve)を提供してください。さらに、サンプルコードは、(Javaコードの場合と同様に)英語のみを使用すると読みやすく、理解しやすくなります。 – Scheff

答えて

0

ちょうどlfinaleを返します。

呼び出し元の関数に既にあるので、実際には返す必要はありません。呼び出し元の関数で

struct final_list results; 
results.lenght = 0; 
results.variaton = NULL; 

solution_change(&lrest, &lvariation, &results, price, position); 

// results has now been populated. 

これは、呼び出しの前にListを作成し、それをパラメータとして送信するのと同じです。

関連する問題