コインを交換するプログラムを書いています。iまたはjプログラムを印刷するためにループでprintfを記述すると、良い結果が得られますが、削除するとプログラムが停止します。メモリに問題があると思いますが、QT の Windows で書いていて、valgrind にアクセスできません。
誰でもこれを確認できますか?最初に金種の数を指定し、2 番目に金種を指定し、最後に金額を指定します。
例えば:
3
1 3 5
8
結果は 2 になるはずです。
1
5
3
結果は NO でなければなりません。
#include <stdio.h>
#include <stdlib.h>
#define INF 2147483647 //nieskonczonosc
void nominal(int nominaly, int T[], int k)
{
int i;
for (i=1; i<=nominaly; i++ )
{
int n=0;
scanf("%d", &n);
int j;
for ( j=0;j<=k-n;++j) {
if (T[j] < INF)
if (T[j]+1 < T[j+n])
T[j+n] = T[j]+1;
}
}
int kwota=0;
scanf("%d", &kwota);
if(T[kwota]==INF){
printf("NO");
}else
printf("%d", T[kwota]);
}
int main() {
int n=0;
scanf("%d", &n);
int k=10000;
int *T;
T = (int*)malloc(k * sizeof(int));
T[0]=0;
int i;
for (i=1;i<=k;++i)
{
T[i]=INF;
}
nominal(n, T, k);
free(T);
return 0;
}