m0_54241339 2023-09-25 18:00 采纳率: 50%
浏览 18
已结题

关于#c语言#的问题:用c或c++写一个计算下列问题有关软件工程的代码并加上分析

用c或c++写一个计算下列问题有关软件工程的代码并加上分析
活动的持续时间
活动的最早开始时间
活动的最早结束时间
活动的最晚开始时间
活动的最晚结束时间

  • 写回答

15条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2023-09-25 18:07
    关注
    获得0.60元问题酬金

    引自免费小程序-皆我百晓生,希望对题主有所帮助,如有帮助,还望采纳。


    这是一个关于软件工程活动时间计算的问题。我们可以使用C或C++编写代码来解决这个问题,并给出相应的分析。以下是一个示例代码:

    #include <stdio.h>
    #define MAX 100
    
    // 结构体表示每个活动的信息
    typedef struct {
      int duration;   // 活动的持续时间
      int earliestStart;   // 活动的最早开始时间
      int earliestFinish;  // 活动的最早结束时间
      int latestStart;     // 活动的最晚开始时间
      int latestFinish;    // 活动的最晚结束时间
    } Activity;
    
    // 计算活动时间和关键路径
    void calculateActivityTimes(Activity activities[], int n) {
      // 初始化第一个活动的最早开始时间和最早结束时间为0
      activities[0].earliestStart = 0;
      activities[0].earliestFinish = activities[0].duration;
    
      // 逐个计算活动的最早开始时间和最早结束时间
      for (int i = 1; i < n; i++) {
        activities[i].earliestStart = activities[i].earliestFinish = -1;
        for (int j = 0; j < i; j++) {
          if (activities[j].earliestFinish > activities[i].earliestStart) {
            activities[i].earliestStart = activities[j].earliestFinish;
          }
        }
        activities[i].earliestFinish = activities[i].earliestStart + activities[i].duration;
      }
    
      // 初始化最后一个活动的最晚开始时间和最晚结束时间为最早结束时间
      activities[n - 1].latestFinish = activities[n - 1].earliestFinish;
      activities[n - 1].latestStart = activities[n - 1].latestFinish - activities[n - 1].duration;
    
      // 逐个计算活动的最晚开始时间和最晚结束时间
      for (int i = n - 2; i >= 0; i--) {
        activities[i].latestFinish = activities[n - 1].latestStart;
        activities[i].latestStart = activities[i].latestFinish - activities[i].duration;
        for (int j = i + 1; j < n; j++) {
          if (activities[j].latestStart < activities[i].latestFinish) {
            activities[i].latestFinish = activities[j].latestStart;
            activities[i].latestStart = activities[i].latestFinish - activities[i].duration;
          }
        }
      }
    }
    
    int main() {
      int n; // 活动数
      Activity activities[MAX];
    
      printf("请输入活动数:");
      scanf("%d", &n);
    
      printf("请输入每个活动的持续时间:\n");
      for (int i = 0; i < n; i++) {
        scanf("%d", &activities[i].duration);
      }
    
      calculateActivityTimes(activities, n);
    
      printf("活动\t持续时间\t最早开始时间\t最早结束时间\t最晚开始时间\t最晚结束时间\n");
      for (int i = 0; i < n; i++) {
        printf("%d\t%d\t\t%d\t\t%d\t\t%d\t\t%d\n", i+1, activities[i].duration, activities[i].earliestStart, activities[i].earliestFinish, activities[i].latestStart, activities[i].latestFinish);
      }
    
      return 0;
    }
    

    这段代码定义了一个结构体 Activity 表示每个活动的信息,包括活动的持续时间、最早开始时间、最早结束时间、最晚开始时间和最晚结束时间。函数 calculateActivityTimes 计算了每个活动的最早开始时间和最早结束时间,以及最晚开始时间和最晚结束时间,并存储在对应的结构体成员中。

    main 函数中,首先接收用户输入的活动数和每个活动的持续时间,并调用 calculateActivityTimes 函数计算活动的时间。最后,输出每个活动的信息,包括活动的持续时间、最早开始时间、最早结束时间、最晚开始时间和最晚结束时间。

    这段代码通过动态规划的思想,计算了活动的时间并找出了关键路径。分析这段代码的时间复杂度为 O(n^2),其中 n 表示活动数。由于嵌套的循环,计算活动时间的过程中需要迭代 n 次。因此,这段代码的效率在一般情况下是可接受的,但当活动数较大时可能会有较高的计算复杂度。

    评论

报告相同问题?

问题事件

  • 系统已结题 10月3日
  • 创建了问题 9月25日

悬赏问题

  • ¥15 关于#vscode#的问题:ESP32开发板对接MQTT实现小灯泡的开关
  • ¥15 TMC2209串口模式下读取不到寄存器的值串口助手蓝色字体是发过去的消息,绿色字体是收到的消息,第二行发送读取寄存器的指令但是没有读取到寄存器的值串口助手如下图:接线如下图,如何解决?
  • ¥15 高通安卓11提取完整线刷包软件,或者优博讯dt50顺丰刷机包
  • ¥20 C,有个译码器,换了信道就跑不出原来数据
  • ¥15 MIMIC数据库安装问题
  • ¥60 基于JTag协议开发Fpga下载器上位机,哪位大🐂有偿指导?
  • ¥20 全书网Java爬取数据
  • ¥15 怎么获取红包封面的原始链接,并且获取红包封面序列号
  • ¥100 微信小程序跑脚本授权的问题
  • ¥100 房产抖音小程序苹果搜不到安卓可以付费悬赏