ホームページ  >  記事  >  バックエンド開発  >  映画祭の参加者がフルで鑑賞できる映画の数を計算する C++ プログラム

映画祭の参加者がフルで鑑賞できる映画の数を計算する C++ プログラム

WBOY
WBOY転載
2023-09-09 12:33:041059ブラウズ

映画祭の参加者がフルで鑑賞できる映画の数を計算する C++ プログラム

さまざまな国のさまざまな映画を上映する映画祭があるとします。ここで、参加者は重複しない映画をできるだけ多く鑑賞したいと考えており、私たちは参加者が参加できる映画の数を把握できるように支援する必要があります。

次のメンバーを含む構造 Movie があります:

  • 映画の開始時間。
  • 映画の長さ。
  • 映画の終了時刻。

次のメンバーで構成されたフェスティバルという構造もあります:

  • フェスティバルの映画の数。
  • サイズがフェスティバル内の映画の数と同じであるタイプ Movie の配列。

Festival オブジェクトを作成して初期化する必要があります。このオブジェクトには 2 つの配列 'timeBegin' と 'duration' が含まれており、それぞれ複数の映画の開始時刻と継続時間が含まれます。整数 n はムービーの総数を表し、オブジェクトの初期化にも使用されます。さらに、このオブジェクトを使用して、参加者がフルで視聴できる映画の数を計算します。

入力が timeBegin = {1, 3, 0, 5, 5, 8, 8}、duration = {3, 2, 2, 4, 3, 2, 3} の場合、n = 7の場合、出力は 4

になります。参加者はフェスティバルで 4 本の映画を完全に視聴できます。

この問題を解決するには、次の手順に従います。

  • 構造ムービー {
    • 3 つのメンバー変数 timeBegin、duration、timeEnd
    • を定義します。
    • オーバーロードされた演算子 '
    • Return timeEnd
  • Structure Festival {
    • メンバ変数 count
    • ムービー タイプの項目を含む配列を定義します。
    filmFestival := 新しい Festival オブジェクト
  • filmFestival の count := count
    • 初期化 i := 0 の場合、i
    • temp := timeBegin
    • temp := timeBegin[i]
    • temp period := due[i]
    • timeEnd of temp := timeBegin[i]duration[i]
    • filmFestival のムービー配列に temp を挿入します
    • filmFestival に戻る
  • 関数solve()を定義します。これは、Fest タイプの変数 fest を受け入れます。
  • res := 0
  • fest の映画 配列はソートされます
    • timeEnd := -1
    • 初期化 i := 0 の場合、i
    • がカウントされたら、更新 (i を 1 ずつ増やす) して、次の操作を実行します。
    • If timeBegin ofフェスの映画[i] >= timeEnd、次の操作を実行します:
    • (解像度を1増やす)
      • timeEnd := フェスの映画[i]のtimeEnd
        Return res
  • よりよく理解するために、次の実装を見てみましょう:
    #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++ プログラムの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

    声明:
    この記事はtutorialspoint.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。