-1

这是问题:

编写一个程序来跟踪一个 10 分钟内的日程安排并报告日程安排冲突。要表示时间表,请使用大小为 10 的 bool 数组;该数组知道任何给定的分钟是否被计划任务占用。您应该将此数组中的所有值初始化为false,表示用户尚未安排任何事情。1. 声明一个正确大小和类型的数组。初始化它,如图所示。在继续之前执行此操作。

一个任务恰好需要 1 分钟,但任务将在整个计划中重复,如下所示。一个任务会有一个第一次和一个间隔。第一次是一个整数,表示第一次完成任务的确切分钟数。间隔指示重复任务之前的分钟数。如果间隔为 0,则任务根本不会重复(因此任务只发生一次)。要将此任务输入到我们的计划中,我们将在所有这些时间将布尔值设置为 true。2.编写一个函数,将数组、它的大小、第一次时间和间隔作为输入,并将适当的数组元素设置为真。

  1. 您的程序应该反复提示用户输入两个整数作为第一次和间隔。如果输入了任一整数的负值,则程序应终止。否则,您的程序应继续将 schedule 数组中的适当位置设置为 true(使用您的函数!)。

  2. 该程序还应该在此过程中检查冲突。如果程序尝试在已设置为 true 的 schedule 数组中的某个位置安排新任务,则会发生冲突。发生这种情况时,您的程序应在屏幕上打印“在时间 T 发生冲突”,其中 T 是在调度中检测到冲突的位置。提示:检测冲突比听起来容易。修改你的功能!

  3. 最后,您的程序应跟踪自开始运行以来检测到的冲突总数,并应在终止前打印出该值。提示:您的函数可能会返回一个整数,指示在尝试安排当前任务时检测到多少冲突。您也必须改变使用此功能的方式!

这是我的代码,我不知道有什么问题,你能帮忙吗?谢谢

#include <iostream>
using namespace std;

int schedule (bool arr[], int size, int firstTime, int interval)
{
    int conflict = 0;
    int n = firstTime - 1;
    arr[n] = true;

    do
    {
        arr[n + interval] = true;
        n = n + interval;

        if (arr[n + interval] == arr[n + interval])
        {
            cout << "A conflict has occurred at time " << n + interval << endl;
        }

        conflict = conflict + 1;
    }
    while (arr[n] == true);

    cout << "Total conflicts detected: " << conflict << endl;

    return conflict;
}

int main()
{
    int firstTime, interval;
    bool arr[10];
    int i = 0;

    while (i < 10)
    {
        arr[i] = false;
        i = i + 1;
    }


    cout << "Please enter a value for firstTime and interval: " << endl;
    cin >> firstTime >> interval;

    while (firstTime >= 0 && interval >= 0)
    {
        schedule(arr, 10, firstTime, interval);
        cout << arr << endl;
    }

    return 0;
}
4

1 回答 1

0

schedule有2个逻辑错误:

  1. 您需要在更新之前检查数组的现有状态
  2. 你的循环条件应该涉及数组的大小,这样你就不会注销结束
于 2013-11-02T04:14:45.000 回答