我嘗試將代碼從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++代碼的正常工作。 有沒有誰可以幫我
你是什麼意思「不能正常工作」?至少你的內存分配是錯誤的 –
當我運行它時,程序總是關閉。和計算的結果是不同的 –
謝謝@SamiKuhmonen迴應我的問題。 –