C++ 程序,用于确定参加者可以在电影节上完整观看多少部电影

假设有一个电影节正在进行,展示来自不同国家的各种电影。现在,与会者想要观看最大数量的彼此不重叠的电影,我们必须帮助他们找出他们可以观看的电影数量。

有一个结构电影具有以下成员 -

  • 电影开始的时间。

  • 电影的时长。

  • 电影的结束时间。

有以下成员的另一个结构节 -

  • 电影节上的电影数量。

  • Movie 类型的数组,其大小与电影节的电影数量相似。

我们必须使用两个数组“timeBegin”和“duration”创建并初始化一个 Festival 对象,它们分别包含几部电影的开始时间和持续时间。整数 n 表示电影的总数,也用于初始化对象。我们进一步使用该对象来计算与会者可以完整观看的电影数量。

所以,如果输入像 timeBegin = {1, 3, 0, 5, 5, 8, 8}, duration = {3, 2, 2, 4, 3, 2, 3}, n = 7, 那么输出将是 4

参加者可以在该电影节上观看总共 4 部电影。

示例

让我们看看以下实现以获得更好的理解 -

#include<bits/stdc++.h>

using namespace std;

struct Movie {

   int timeBegin, duration, timeEnd;

   bool operator<(const Movie& another) const {

      return timeEnd < another.timeEnd;

   }

};

struct Festival {

   int count;

   vector<Movie> movies;

};

Festival* initialize(int timeBegin[], int duration[], int count) {

   Festival* filmFestival = new Festival;

   filmFestival->count = count;

   for (int i = 0; i < count; i++) {

      Movie temp;

     temp.timeBegin= timeBegin[i];

     temp.duration= duration[i];

     temp.timeEnd= timeBegin[i] + duration[i];

      filmFestival->movies.push_back(temp);

   }

   return filmFestival;

}

int solve(Festival* fest) {

   int res = 0;

   sort(fest->movies.begin(), fest->movies.end());

   int timeEnd = -1;

   for (int i = 0; i < fest->count; i++) {

      if (fest->movies[i].timeBegin >= timeEnd) {

         res++;

            timeEnd = fest->movies[i].timeEnd;

      }

   }

   return res;

}

int main(int argc, char *argv[]) {

int timeBegin[] = {1, 3, 0, 5, 5, 8, 8};

int duration[] = {3, 2, 2, 4, 3, 2, 3};

Festival * fest;

fest = initialize(timeBegin,duration, 7);

cout << solve(fest) << endl;

return 0;

}

输入

int timeBegin[] = {1, 3, 0, 5, 5, 8, 8};

int duration[] = {3, 2, 2, 4, 3, 2, 3};

Festival * fest;

fest = initialize(timeBegin,duration, 7);

输出结果
4

以上是 C++ 程序,用于确定参加者可以在电影节上完整观看多少部电影 的全部内容, 来源链接: utcz.com/z/327362.html

回到顶部