繁体   English   中英

为什么我的 C 程序中途停止运行?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM