2016-01-19 57 views
0

我嘗試將代碼從C++轉換爲c,但程序無法正常工作。從C++轉換爲C

這是C++代碼

#include <iostream> 
#include <limits.h> 
using namespace std; 

int CoinChangeDynamic(int jumlah, int d[], int size, int C[], int s[]) 
{ 
    C[0] = 0; 
    for(int j = 1; j <= jumlah; j++) { 
    C[j] = INT_MAX; 
    for(int i = 0; i < size; i++) { 
     if(j >= d[i] && 1 + C[j-d[i]] < C[j]) { 
     C[j] = 1 + C[j-d[i]]; 
     // i-th denomination used for the amount of j 
     s[j] = i; 
     } 
    } 
    } 
return C[jumlah]; 
} 

int main() 
{ 
    int d[] = {1, 5, 10, 25, 50, 100,500,1000}; 
    int jumlah ;//= 67; 
    cout <<"Masukan Jumlah Nilai Koin = ";cin >>jumlah; 
    int size = sizeof(d)/sizeof(d[0]); 
    int *C = new int[jumlah+1]; 
    int *s = new int[jumlah+1]; 
    int ans = CoinChangeDynamic(jumlah, d, size, C, s); 
    cout << "Minimal Koin = " << ans << endl; 
    cout << "Menggunakan Koin: " ; 
    int k = jumlah; 
    while(k) { 
     cout << d[s[k]] << " "; 
     k = k - d[s[k]]; 
    } 
    delete[] C; 
    delete[] s; 
    return 0; 
} 

這是我的翻譯

#include <stdio.h> 
#include <limits.h> 

int CoinChangeDynamic(int jumlah, int d[], int size, int C[], int s[]) 
{ 
    //variabel 
    int j, i; 

    //program 
    C[0] = 0 ; 
    for(j = 1; j <= jumlah; j++) { 
    C[j] = INT_MAX; 
    for(i = 0; i < size; i++) { 
     if(j >= d[i] && 1 + C[j-d[i]] < C[j]) { 
      C[j] = 1 + C[j-d[i]]; 
      // i-th denomination used for the amount of j 
      s[j] = i; 
     } 
    } 
} 
return C[jumlah]; 
} 

int main() 
{ 
    //variabel 
    int d[] = {1, 5, 10, 25, 50, 100,500,1000}; 
    int jumlah; 
    printf ("Masukan Jumlah Nilai Koin = "); scanf ("%i", &jumlah); 
    int size = sizeof(d)/sizeof(d[0]); 
    int *C = (int *) malloc(sizeof(jumlah+1)); 
    int *s = (int *) malloc(sizeof(jumlah+1)); 

    //program 

    int ans = CoinChangeDynamic(jumlah, d, size, C, s); 
    printf ("Minimal Koin = %i \n", ans); 
    printf ("Menggunakan Koin: ") ; 
    int k = jumlah; 
    while(k) 
    { 
     printf (" %i ", d[s[k]]); 
     k = k - d[s[k]]; 
    } 
    free (C); 
    free (s); 
    return 0; 
} 

但該方案並沒有像C++代碼的正常工作。 有沒有誰可以幫我

+2

你是什麼意思「不能正常工作」?至少你的內存分配是錯誤的 –

+0

當我運行它時,程序總是關閉。和計算的結果是不同的 –

+0

謝謝@SamiKuhmonen迴應我的問題。 –

回答

8

這將幫助:

int *C = (int *) malloc((jumlah+1)*sizeof(int)); 
int *s = (int *) malloc((jumlah+1)*sizeof(int)); 

你錯譯的調用new

注意:純化論者不喜歡演員malloc(int *)。然而,爲了明確導致錯誤的原因,我已經做了最小的更改以糾正錯誤。

+2

謝謝,我的程序現在正常工作。並感謝您告訴我的錯誤。 –

0

此外,請記住,C++ iostreams和C FILE都是緩衝,您可能需要刷新它們。

順便說一句,你的C++代碼不是真正的C++,你應該在其中使用containers

要刷新C++ iostream,請使用std::flush。請注意,std::endl也正在沖洗(發佈換行符後)。

要衝洗C FILE s,請使用fflush。請注意,stdout通常(但並非總是)行緩衝,因此最後使用換行\n結尾printf控制字符串。