从C ++转换为C.

时间:2016-01-19 07:00:32

标签: 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 :(得分: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 ++代码不是正版C ++,你应该使用containers

要刷新C ++ iostream,请使用std::flush。请注意std::endl也在刷新(发出换行符后)。

要刷新C FILE,请使用fflush。请注意,stdout通常(但并不总是)行缓冲,因此最好使用换行符printf结束\n控制字符串。