>백엔드 개발 >C++ >영화제 참가자들이 전체 시청할 수 있는 영화 수를 계산하는 C++ 프로그램

영화제 참가자들이 전체 시청할 수 있는 영화 수를 계산하는 C++ 프로그램

WBOY
WBOY앞으로
2023-09-09 12:33:041110검색

영화제 참가자들이 전체 시청할 수 있는 영화 수를 계산하는 C++ 프로그램

여러 나라의 다양한 영화를 선보이는 영화제가 있다고 가정해 보세요. 이제 참가자는 겹치지 않는 영화를 최대한 많이 참석하기를 원하므로 참석할 수 있는 영화 수를 파악하도록 도와야 합니다.

다음 멤버로 구성된 영화 구조가 있습니다.

  • 영화 시작 시간입니다.
  • 영화 길이.
  • 영화 종료 시간.

다음과 같은 회원으로 구성된 구조 페스티벌도 있습니다:

  • 페스티벌의 영화 수.
  • 영화제의 영화 수와 동일한 크기의 영화 유형 배열입니다.

여러 영화의 시작 시간과 기간을 각각 포함하는 두 개의 배열 'timeBegin'과 'duration'이 포함된 Festival 객체를 생성하고 초기화해야 합니다. 정수 n은 총 영화 수를 나타내며 객체를 초기화하는 데에도 사용됩니다. 또한 이 개체를 사용하여 참가자가 전체를 볼 수 있는 영화 수를 계산합니다.

입력이 timeBegin = {1, 3, 0, 5, 5, 8, 8}, 기간 = {3, 2, 2, 4, 3, 2, 3}, n = 7이면 출력은 will be Yes 4

이번 영화제에서 참가자들은 4편의 영화를 전편으로 감상할 수 있습니다.

이 문제를 해결하기 위해 다음 단계를 따르겠습니다.

  • Structure Movie {
    • 3개의 멤버 변수 timeBegin, Duration, timeEnd
    • 오버로드 연산자 '
    • Return timeEnd
  • Structure Festival {
    • 멤버 변수 개수 정의
    • 영화 유형 항목이 포함된 배열 정의 영화
  • 배열 timeBegin을 허용하는 함수 초기화() 정의 timeEnd 및 정수 n.
    • filmFestival := 새로운 Festival 객체
    • filmFestival's count := count
    • 초기화의 경우 i := 0, i
    • temp := A new 영화 유형 객체
    • temp timeBegin := timeBegin[i]
    • temp Duration := Duration[i]
    • temp timeEnd := timeBegin[i] + Duration[i]
    • insert temp into filmFestival의 영화 배열에서,
  • 는 filmFestival
  • Festival 유형의 변수 fest,
    • res := 0
    • 을 허용하는 함수solv()를 정의하여 fest
    • 의 영화 배열을 정렬합니다. timeEnd := -1
    • 초기화 i := 0일 때 i 카운트하고 업데이트(i를 1씩 증가)하고 다음 작업을 수행합니다.
      • fest의 영화의 timeBegin[i] >= timeEnd인 경우 다음 작업을 수행합니다.
        • ( res를 1)
        • timeEnd := timeEnd of fest's movie[i]
    • Return res
  • Example

    더 나은 이해를 위해 다음 구현을 살펴보겠습니다.

    출력

    #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;
    }

    위 내용은 영화제 참가자들이 전체 시청할 수 있는 영화 수를 계산하는 C++ 프로그램의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

    성명:
    이 기사는 tutorialspoint.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제