m0_74048740 2024-04-20 13:39 采纳率: 28.6%
浏览 6
已结题

codeblocks编译算法设计


#include <stdio.h>
#include <stdlib.h>

#define N 310
int min(int a, int b)
{
    if(a<b)
        return  a;
    return b;
}

int max(int a, int b)
{
    if(a<b)
        return  b;
    return a;
}

int main()
{
    FILE *file;
    int n, i, j, k;
    int a[2*N+1], s[2*N+1];
    int f[2*N+1][2*N+1], d[2*N+1][2*N+1];
    printf("1");

    file = fopen("E:\\算法\\第3章动态规划实验\\prog33石子合并问题\\test\\merge1.in", "r");
    if (file == NULL)
    {
        perror("Error opening file");
        return 0;
    }

    fscanf(file, "%d", &n);
    printf("%d\n", n);

    for (i = 1; i <= n; i++)
    {
        fscanf(file, "%d", &a[i]);
        printf("%d ", a[i]);
    }
    printf("\n");

    for (i = n + 1; i <= 2 * n; i++)
    {
        a[i] = a[i - n];
    }
    for (i = 1; i <= 2 * n; i++)
    {
        s[i] = s[i - 1] + a[i];
    }
    fclose(file);
    // 初始化数组 f
    for (i = 1; i <= 2 * n; i++)
    {
        for (j = 1; j <= 2 * n; j++)
        {
            f[i][j] = 0x3f3f3f3f;
        }
    }
    // 初始化数组 d
    for (i = 1; i <= 2 * n; i++)
    {
        for (j = 1; j <= 2 * n; j++)
        {
            d[i][j] = 0;
        }
    }
    for (i = 1; i <= 2 * n; i++)
    {
        f[i][i] = 0;
    }
    // 枚举区间长度
    for (int len = 2; len <= n; len++)
    {
        // 枚举区间起点
        for (i = 1; i + len - 1 <= 2 * n; i++)
        {
            int j = i + len - 1;

            for (k = i; k < j; k++)
            {
                f[i][j] = min(f[i][j], f[i][k] + f[k + 1][j] + s[j] - s[i - 1]);
                d[i][j] = max(d[i][j], d[i][k] + d[k + 1][j] + s[j] - s[i - 1]);
            }
        }
    }
    printf("%d\n", f[1][n]);
    printf("%d\n", d[1][n]);
    file = fopen("E:\\算法\\第3章动态规划实验\\prog33石子合并问题\\answer\\merge1.out", "r");
    if (file == NULL)
    {
        perror("Error opening file");
        return -1;
    }
    int h[2] = {0};
    for (i = 0; i < 2; i++)
    {
        fscanf(file, "%d", &h[i]);
    }
    fclose(file);
    if (h[0] == f[1][n] && h[1] == d[1][n])
    {
        printf("检测成功\n");
    }
    else
    {
        printf("检测不符\n");
    }

    return 0;
}

这是石子合并问题为什么在codeblocks上没有报错,但是一运行就直接结束了,也没有任何输出,在主函数的第一条代码加上printf语句输出也没有任何打印输出。

  • 写回答

6条回答 默认 最新

  • 关注

    下午好🌅🌅🌅
    本答案参考ChatGPT-3.5

    问题分析:

    根据提供的代码,可以看出在运行过程中出现了问题导致程序直接结束,没有任何输出。根据代码的特点,可能出现以下几种情况:

    1. 读取文件失败,导致后面的操作没有数据可以处理,程序直接结束;
    2. 在程序运行过程中出现了大量无法处理的错误,导致整个程序崩溃;
    3. 程序出现死循环;
    4. 程序运行时间过长,没有得到结果,看起来程序“卡死”了。

    解决方案:

    针对以上可能出现的情况,可以采取以下策略排查和解决问题:

    1. 检查文件是否存在,并检查是否能够成功打开文件。如果打开文件失败,可以考虑使用绝对路径重新检查文件是否能够成功打开;
    2. 在程序中添加必要的调试信息,例如在每个特定的代码行添加“printf”信息帮助调试,并通过信息判断程序是否有出现异常;
    3. 检查程序的逻辑是否正确,是否出现死循环,是否有能够导致整个程序崩溃的错误;
    4. 在程序中添加必要的输出语句,例如在每个特定的代码行添加计时器,可以帮助判断程序是否在某个位置出现了卡死的情况。

    其中,第一种和第二种问题都可以通过检查文件和添加调试信息来解决。第三种问题可以通过检查程序逻辑来优化代码,消除死循环等问题;第四种问题可以通过添加计时器等方法来解决。同时,使用错误日志也是一个提高代码鲁棒性的好方法。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(5条)

报告相同问题?

问题事件

  • 系统已结题 5月9日
  • 已采纳回答 5月1日
  • 创建了问题 4月20日

悬赏问题

  • ¥50 如何在arduino上,实现用4×4矩阵键盘按键控制2004显示屏输出图中显示功能的代码?
  • ¥15 android studio导航图代码argument的name的ID红色
  • ¥15 P1口接8个发光二极管,利用定时计数器1编写程序
  • ¥20 keil5编译找不到.h文件该如何解决
  • ¥15 安卓EVS如何开启服务正常实现功能
  • ¥15 canal读取mysql时报错
  • ¥15 关于 S7-PLCSIM Advanced 5.0本地TCP连接无法读写数据
  • ¥15 关于温度改变石墨烯介电性能(关键词-介电常数)
  • ¥150 HDMI分路器LT86102 的输出在890MHz频点处EMC超标8DB
  • ¥15 druid(相关搜索:数据库|防火墙)