[英]Why my C program stops running in the middle?
我正在尝试使用动态编程方法计算最小硬币面额,但我的代码在第二次查询后停止运行,即使如果我提供 T = 10 它应该运行 10 次。为什么它会停止?
#include<stdio.h>
#include<math.h>
#include<stdlib.h>
int min(int x, int y)
{
return (x < y) ? x : y;
}
short int min_denom(short int N)
{
short int *table, i, j, x;
table = (short int*)malloc(N * sizeof(short int));
for(i = 0; i < N; i++)
table[i] = 1 + i;
for(i = 1; i <= (short int)sqrt(N); i++)
for(j = 0; j < N; j++)
if(j == i)
table[j] = min(1, table[j]);
else if(j > i)
table[j] = min(table[j - i - 1] + 1, table[j]);
x = table[N - 1];
free(table);
return x;
}
int main()
{
short int T, N, i;
scanf("%d", &T);
for(i = 1; i < T; i++)
{
scanf("%d", &N);
printf("%d\n", min_denom((short int)N));
}
scanf("%d", &N);
printf("%d\n", min_denom((short int)N));
return 0;
}
output 是:
10
100
10
500
22
然后它会自动停止运行。
如果我们将“%d”替换为“%hd”或“%hi”,代码将一直运行到最后。 原因是因为我们正在接受的输入将存储在一个短整数类型的变量中,所以我们必须为此使用正确的访问说明符。
更改部分如下所示。
short int T, N, i;
scanf("%hi", &T);
for(i = 1; i < T; i++)
{
scanf("%hi", &N);
printf("%hi\n", min_denom((short int)N));
}
scanf("%hi", &N);
printf("%hi\n", min_denom((short int)N));
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.