Rumah >pembangunan bahagian belakang >C++ >Kira bilangan selang yang bersilang dengan masa mesyuarat tertentu

Kira bilangan selang yang bersilang dengan masa mesyuarat tertentu

王林
王林ke hadapan
2023-08-31 20:13:04723semak imbas

Kira bilangan selang yang bersilang dengan masa mesyuarat tertentu

Pernyataan Masalah

Kami telah diberikan tatasusunan dua dimensi yang mengandungi pasangan masa mula dan tamat, mewakili selang masa 12 jam. Pada masa yang sama, kami juga diberi rentetan str yang dinyatakan dalam masa 12 jam. Kita perlu mencari jumlah bilangan selang yang mengandungi masa yang diwakili oleh str.

Contoh Contoh

Masuk

arr[][2] = {{“12:02:AM”, “10:55:PM”}, 
{“12:51:AM”, “11:40:AM”}, 
{“01:30:AM”, “12:00:PM”}, 
{“11:57:PM”, “11:59:PM”}}, 
str = “2:30:AM”

Output

3
Terjemahan bahasa Cina bagi

Penjelasan

ialah:

Penjelasan

Masa "2:30:AM" bersilang dengan tiga selang masa sebelumnya.

Masuk

arr[][2] = {{“01:02:PM”, “10:55:PM”}, 
{“01:30:AM”, “11:00:AM”}}, str = “11:30:PM”

Output

0
Terjemahan bahasa Cina bagi

Penjelasan

ialah:

Penjelasan

Masa "11:30:30" tidak bersilang dengan mana-mana selang masa yang diberikan dalam tatasusunan.

Kaedah 1

Dalam kaedah ini kita akan menukar masa kepada jam 24 jam. Kami kemudian akan mengira jumlah bilangan selang masa yang bersilang dengan masa yang diberikan dengan perbandingan. Tambahan pula, kami akan menggunakan kaedah substr() untuk mendapatkan substring dan kaedah stoi() untuk menukar rentetan kepada integer.

Algoritma

  • Langkah 1 - Tentukan fungsi convertTime() untuk menukar masa kepada format 24 jam.

  • Langkah 1.1 − Gunakan kaedah replace() untuk menggantikan kolon di kedudukan ketiga dengan rentetan kosong.

  • Langkah 1.2 − Dapatkan aksara pertama dan kedua yang mewakili jam daripada rentetan yang diberikan dan tukarkannya kepada jam dengan mendarab nombor pertama dengan 10 campur nombor kedua.

  • Langkah 1.3 - Mulakan pembolehubah 'masa_24' kepada sifar.

  • Langkah 1.4 − Kita perlu mengendalikan dua situasi untuk menukar masa kepada format 24 jam. Kes pertama pada sebelah pagi dan kes kedua pada sebelah petang.

  • Langkah 1.4.1 - Jika aksara ke-5 dalam rentetan ialah 'A', maka masanya ialah AM. Jika masa adalah AM dan jam bersamaan dengan 12, hanya minit diekstrak daripada rentetan kerana kami menganggap 12:00 AM sebagai jam 00:00. Jika tidak, tukar rentetan masa kepada nilai integer.

  • Langkah 1.4.2 - Jika aksara kelima dalam rentetan ialah 'P', maka masanya ialah PM. Ekstrak rentetan masa dan tukarkannya kepada integer. Selain itu, jika jam tidak sama dengan 12, 1200 ditambah pada pembolehubah 'time_24'.

  • Langkah 2 - Fungsi convertTime() akan mengembalikan masa dalam format berikut.

    • 12:00:AM = 0000

    • 12:58:AM = 0059

    • 11:32:AM = 1132

    • 11:32:PM = 1200 + 1132 = 2332

    • 04:56:PM = 1200 + 456 = 1656

    • Jika aksara ke-5 dalam rentetan ialah 'A', masanya ialah AM. Jika masa adalah AM dan jam bersamaan dengan 12, hanya minit diekstrak daripada rentetan kerana kami menganggap 12:00 AM sebagai jam 00:00. Jika tidak, tukar rentetan masa kepada nilai integer.

  • Langkah 3 - Tukar rentetan masa yang diberikan kepada format 24 jam.

  • Langkah 4 - Gunakan gelung for untuk menggelung melalui tatasusunan selang masa dan tukar setiap rentetan masa kepada format 24 jam.

  • Langkah 5 - Sementara itu, teruskan periksa sama ada rentetan masa yang diberikan adalah antara selang semasa. Jika ya, tambahkan kiraan 'res' sebanyak 1.

  • Langkah 6 - Kembalikan nilai pembolehubah 'res'.

Contoh

diterjemahkan sebagai:

Contoh

#include <bits/stdc++.h>
using namespace std;
// Function to convert the given time_24 in 24 hours format
int convertTime(string str){
   // Remove the colon from the string
   str.replace(2, 1, "");
   // Stores the hour
   int char_h1 = (int)str[1] - '0';
   int char_h2 = (int)str[0] - '0';
   int hours = (char_h2 * 10 + char_h1 % 10);
   // variable to store the time in 24 hours format
   int time_24 = 0;
   // If the time is in "AM."
   if (str[5] == 'A'){
      // If hours are equal to 12, then update it to 0 as 12 AM, and only minutes to time_24
      if (hours == 12){
         time_24 += stoi(str.substr(2, 2));
      } else {
         // add hours and minutes to time_24
         time_24 += stoi(str.substr(0, 4));
      }
   }
   // If time is in "PM"
   else {
      // If hours is equal to 12, add time as it is to time_24
      if (hours == 12){
         time_24 += stoi(str.substr(0, 4));
      } else {
         // add time to time_24
         time_24 += stoi(str.substr(0, 4));
         // add 1200 = 12 : 00 PM to time_24 to convert in 24 hours format.
         time_24 += 1200;
      }
   }
   return time_24;
}
// Function to find the total number of intervals that intersects with given meeting time_24
int totalIntersects(string arr[][2], int len, string str){
   // to store the total number of intervals
   int res = 0;
   // convert the given time_24 in 24 hours format
   int convertedStr = convertTime(str);
   // Traverse the array
   for (int i = 0; i < len; i++){
      // convert the starting time_24 of the current interval in 24-hour format
      int initial = convertTime(arr[i][0]);
      // convert the ending time_24 of the current interval in 24-hour format
      int end = convertTime(arr[i][1]);
      // If the given time_24 lies in the interval [initial, end], then increment res by 1
      if ((initial <= convertedStr && convertedStr <= end) || (convertedStr >= end && convertedStr <= initial))
         res++;
   }
   // Return res
   return res;
}
int main(){
   string arr[][2] = {{"11:00:AM", "11:55:PM"},
                       {"12:19:AM", "9:30:AM"},
                       {"12:51:AM", "12:59:PM"},
                       {"6:57:AM", "7:50:PM"}};
   string str = "12:54:AM";
   int len = sizeof(arr) / sizeof(arr[0]);
   cout << "The total number of the interval that intersects with given meeting time_24 are - " << totalIntersects(arr, len, str) << endl;
}

Output

The total number of the interval that intersects with given meeting time_24 are - 2
  • Kerumitan masa - O(N) kerana kami mengulangi pelbagai selang masa.

  • Kerumitan ruang − O(1) kerana kami tidak menggunakan ruang tetap.

Apabila menyelesaikan masalah di atas, pengguna harus fokus pada penukaran masa kepada format 24 jam dan kemudian hanya melakukan perbandingan biasa.

Atas ialah kandungan terperinci Kira bilangan selang yang bersilang dengan masa mesyuarat tertentu. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:tutorialspoint.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam
Artikel sebelumnya:Nombor yang kejiArtikel seterusnya:Nombor yang keji