Computer >> 컴퓨터 >  >> 프로그램 작성 >> C++

영화제에서 참석자가 전체를 볼 수 있는 영화 수를 알아내는 C++ 프로그램

<시간/>

다양한 국가의 다양한 영화를 선보이는 영화제가 열리고 있다고 가정해 보겠습니다. 이제 참석자는 서로 겹치지 않는 최대 수의 영화에 참석하기를 원하며 우리는 그들이 참석할 수 있는 영화를 찾을 수 있도록 도와야 합니다.

다음 멤버가 있는 구조 Movie가 있습니다. -

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

다음 구성원과 함께 또 다른 구조의 축제가 있습니다 -

  • 영화제의 영화 수.
  • 영화제의 영화 수와 크기가 비슷한 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편의 영화를 관람할 수 있습니다.

이 문제를 해결하기 위해 다음 단계를 따릅니다. −

  • 영화 구조 {
    • 3개의 멤버 변수 timeBegin, duration, timeEnd 정의
    • '<' 연산자를 오버로드하면 Movie 유형 변수가 사용됩니다.
      • return timeEnd
  • 구조체 축제 {
    • 회원 수 정의
    • 영화 유형 항목을 포함하는 배열 영화 정의
  • initialize() 함수를 정의합니다. 이것은 timeBegin 및 timeEnd 배열과 n.
    • filmFestival :=새로운 축제 대상
    • filmFestival 수 :=count
    • 초기화 i의 경우:=0, i <개수, 업데이트(i를 1만큼 증가), 수행 -
      • temp :=Movie 유형의 새 개체
      • temp의 timeBegin:=timeBegin[i]
      • 온도 지속 시간:=지속 시간[i]
      • timeEnd of temp :=timeBegin[i] + duration[i]
      • filmFestival의 배열 영화에 임시 삽입
    • 반품 필름 페스티벌
  • solve() 함수를 정의하면 Festival 유형의 가변 축제가 필요합니다.
    • res :=0
    • 축제의 배열 영화 정렬
    • timeEnd :=-1
    • 초기화 i:=0의 경우, i 카운트, 업데이트(i 1만큼 증가), 수행 -
      • if timeBegin of movies[i] of fest>=timeEnd이면 -
        • (해상도 1 증가)
        • timeEnd :=영화 축제[i]의 timeEnd
    • 반환 결과

예시

이해를 돕기 위해 다음 구현을 살펴보겠습니다. −

#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