Heim  >  Artikel  >  Backend-Entwicklung  >  C++-Programm zur Berechnung, wie viele Filme auf einem Filmfestival die Teilnehmer vollständig ansehen können

C++-Programm zur Berechnung, wie viele Filme auf einem Filmfestival die Teilnehmer vollständig ansehen können

WBOY
WBOYnach vorne
2023-09-09 12:33:041051Durchsuche

C++-Programm zur Berechnung, wie viele Filme auf einem Filmfestival die Teilnehmer vollständig ansehen können

Angenommen, es gibt ein Filmfestival, das verschiedene Filme aus verschiedenen Ländern zeigt. Nun möchte ein Teilnehmer so viele sich nicht überschneidende Filme wie möglich sehen, und wir müssen ihm dabei helfen, herauszufinden, wie viele Filme er besuchen kann.

Es gibt eine Struktur „Film“, die folgende Mitglieder hat:

  • Die Startzeit des Films.
  • Die Dauer des Films.
  • Endzeit des Films.

Es gibt auch ein Strukturfestival, das folgende Mitglieder hat:

  • Die Anzahl der Filme im Festival.
  • Ein Array vom Typ „Film“, dessen Größe der Anzahl der Filme im Festival entspricht.

Wir müssen ein Festival-Objekt erstellen und initialisieren, das zwei Arrays „timeBegin“ und „duration“ enthält, die jeweils die Startzeit und die Dauer mehrerer Filme enthalten. Die Ganzzahl n stellt die Gesamtzahl der Filme dar und wird auch zur Initialisierung des Objekts verwendet. Darüber hinaus verwenden wir dieses Objekt, um zu berechnen, wie viele Filme ein Teilnehmer vollständig ansehen kann.

Wenn also die Eingabe timeBegin = {1, 3, 0, 5, 5, 8, 8}, Dauer = {3, 2, 2, 4, 3, 2, 3}, n = 7 ist, dann ist die Ausgabe wird Ja 4

Teilnehmer können bei diesem Filmfestival 4 Filme in voller Länge ansehen.

Um dieses Problem zu lösen, führen wir die folgenden Schritte aus:

  • Film strukturieren {
    • Definieren Sie drei Mitgliedsvariablen timeBegin, Dauer, timeEnd
    • Überlastungsoperator '
    • Return timeEnd
  • Structure Festival {
    • Definieren Sie eine Mitgliedsvariable count
    • Definieren Sie ein Array mit Elementen vom Typ „Filme“
  • Definieren Sie eine Funktion initialize(), die Arrays timeBegin akzeptiert und timeEnd und eine Ganzzahl n.
    • filmFestival := Ein neues Festival-Objekt
    • filmFestival's count := count
    • Führen Sie zur Initialisierung i := 0, wenn i
    • temp := Ein neues Objekt vom Typ Film
    • temp timeBegin := timeBegin[i]
    • temp Duration := Dauer[i]
    • temp timeEnd := timeBegin[i] + Dauer[i]
    • Temp in das Array movies von filmFestival einfügen,
  • gibt filmFestival zurück
  • Definieren Sie eine Funktionsolve(), die eine Variable fest vom Typ Festival akzeptiert,
    • res := 0
    • , um das Filmarray von fest
    • timeEnd := -1
    • zu sortieren
    • Für die Initialisierung i := 0, wenn ich zähle, aktualisiere (i um 1 erhöhe), führe die folgenden Operationen aus:
      • Wenn der timeBegin of movies[i] of fest >= timeEnd ist, führe die folgende Operation aus:
        • ( inkrementieren Sie res um 1)
        • timeEnd := timeEnd of movies[i] of fest
    • return res
  • Beispiel

    Schauen wir uns zum besseren Verständnis die folgende Implementierung an. :

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

    input

    r reee

    Ausgabe

    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);

    Das obige ist der detaillierte Inhalt vonC++-Programm zur Berechnung, wie viele Filme auf einem Filmfestival die Teilnehmer vollständig ansehen können. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

    Stellungnahme:
    Dieser Artikel ist reproduziert unter:tutorialspoint.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen
    Vorheriger Artikel:Ein Nested-Loop-Puzzle?Nächster Artikel:Ein Nested-Loop-Puzzle?