首頁 > 後端開發 > C++ > 主體

C++程序,用於計算參與者在電影節上能完整觀看多少部電影

WBOY
發布: 2023-09-09 12:33:04
轉載
1047 人瀏覽過

C++程序,用於計算參與者在電影節上能完整觀看多少部電影

假設有一個電影節,展示來自不同國家的各種電影。現在,一個參與者想要參加盡可能多的不重疊的電影,我們需要幫助他們找出他們可以參加多少部電影。

有一個結構體 Movie,它有以下成員:

  • 電影的開始時間。
  • 電影的持續時間。
  • 電影的結束時間。

還有一個結構體 Festival,它有以下成員:

  • 電影節的電影數量。
  • 一個類型為 Movie 的數組,其大小與電影節的電影數量相同。

我們需要建立並初始化一個 Festival 對象,其中包含兩個陣列 'timeBegin' 和 'duration',它們分別包含多部電影的開始時間和持續時間。整數 n 表示電影的總數,也用來初始化物件。我們進一步使用該物件來計算參與者可以完整觀看多少部電影。

因此,若輸入是timeBegin = {1, 3, 0, 5, 5, 8, 8},duration = {3, 2, 2, 4, 3, 2, 3},n = 7 ,那麼輸出將是4

參與者可以在該電影節上完整觀看4 部電影。

為了解決這個問題,我們將按照以下步驟進行:

  • 結構體Movie {
    • 定義三個成員變數timeBegin、duration、timeEnd
    • 重載運算子'
    • 返回timeEnd
  • #結構體Festival {
    • 定義一個成員變數count
    • 定義一個包含Movie 類型項目的陣列movies
  • 定義一個函數initialize(),它將接受陣列timeBegin 和timeEnd 以及一個整數n。
    • filmFestival := 一個新的Festival 物件
    • filmFestival 的count := count
    • 對於初始化i := 0,當i
    • temp := 一個新的Movie 類型物件
    • temp 的timeBegin := timeBegin[i]
    • temp 的duration := duration[ i]
    • temp 的timeEnd := timeBegin[i] duration[i]
    • 將temp 插入filmFestival 的movies 陣列中
  • 傳回filmFestival
  • 定義一個函數solve(),它將接受一個類型為Festival 的變數fest,
    • res := 0
    • 對fest 的movies陣列進行排序
    • timeEnd := -1
    • 對於初始化i := 0,當i count 時,更新(將i 增加1),執行下列操作:
      • 如果fest 的movies[i] 的timeBegin >= timeEnd,則執行以下操作:
        • (將res 增加1)
        • timeEnd := fest 的movies[i] 的timeEnd
    • 返回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中文網其他相關文章!

    來源:tutorialspoint.com
    本網站聲明
    本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
    熱門教學
    更多>
    最新下載
    更多>
    網站特效
    網站源碼
    網站素材
    前端模板
    關於我們 免責聲明 Sitemap
    PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!