我尝试将代码从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 ++代码那样正常工作。 是否有人可以帮助我
答案 0 :(得分:8)
这会有所帮助:
int *C = (int *) malloc((jumlah+1)*sizeof(int));
int *s = (int *) malloc((jumlah+1)*sizeof(int));
您错误地将调用误译为new
。
NB:纯粹主义者不喜欢malloc
到(int *)
的演员表。然而,为了清楚导致错误的原因,我做了最小的修改来纠正它。
答案 1 :(得分:0)
另外,请记住,C ++ iostream和C FILE
都是缓冲的,您可能需要刷新它们。
要刷新C ++ iostream,请使用std::flush
。请注意std::endl
也在刷新(发出换行符后)。
要刷新C FILE
,请使用fflush
。请注意,stdout
通常(但并不总是)行缓冲,因此最好使用换行符printf
结束\n
控制字符串。