Rumah > pembangunan bahagian belakang > C++ > Maksimumkan nilai yang hilang dalam tempoh masa tertentu, dalam format HH:MM

Maksimumkan nilai yang hilang dalam tempoh masa tertentu, dalam format HH:MM

王林
Lepaskan: 2023-09-07 17:41:07
ke hadapan
646 orang telah melayarinya

Maksimumkan nilai yang hilang dalam tempoh masa tertentu, dalam format HH:MM

Mewakili rentetan panjang lima yang diberikan sebagai masa dalam format HH:MM. Rentetan itu mungkin mengandungi beberapa "?" dan kita perlu menggantikannya dengan sebarang nombor supaya hasilnya adalah masa yang sah dan mungkin masa yang paling besar. Tambahan pula, nombor rentetan yang diberikan adalah sah dan ":" akan muncul pada kedudukan rentetan yang tepat. Kami akan menggunakan kaedah kekerasan terlebih dahulu dan kemudian menggunakan kaedah yang cekap.

Contoh Contoh

Masukkan 1

Given string: 12:5?
Output: 12:59
Salin selepas log masuk
Terjemahan bahasa Cina bagi

Penjelasan

ialah:

Penjelasan

Kami hanya mempunyai satu tempat untuk diisi dan masa maksimum yang kami dapat ialah 12:59.

Masukkan 2

Given string: ?0:?9
Output: 20:59
Salin selepas log masuk
Terjemahan bahasa Cina bagi

Penjelasan

ialah:

Penjelasan

Kami mempunyai dua slot kosong di sini, pertama kami akan fokus pada bahagian jam, kami mempunyai tiga pilihan 0, 1 dan 2 untuk mengisinya. Untuk bahagian minit kita mempunyai pilihan dari 0 hingga 5, untuk memaksimumkan kita boleh mengisi 5.

Kaedah

Kami telah melihat contoh, sekarang mari lihat pelbagai jenis situasi yang mungkin kami hadapi −

  • Kami mempunyai dua bahagian rentetan, bahagian jam dan bahagian minit.

  • Bahagian jam adalah antara 0 hingga 23, dan bahagian minit antara 0 hingga 59.

  • Ada lebih banyak situasi dalam bahagian jam−

    • ‘x?’ di mana x boleh menjadi 0, 1 dan 2. Untuk 0, kita boleh memilih 0 sebagai pilihan terbaik, untuk 1, kita boleh memilih 9 sebagai pilihan terbaik, dan untuk 2, kita boleh memilih 3 sebagai pilihan terbaik.

    • '?x', di mana x boleh berkisar antara 0 hingga 9. Jika x berada dalam julat 0 hingga 3, kita boleh menggantikannya dengan 2, jika tidak 1 akan menjadi yang terbaik.

    • ‘??’ Memandangkan kita perlu memaksimumkan, kita menggantikannya dengan 23.

  • Minit mesyuarat, beberapa dengan kes lanjut −

    • ‘x?’ di mana x boleh berada dalam julat 0 hingga 5. 9 akan menjadi pilihan terbaik kami untuk menggantikan '?'.

    • ‘?x’ di mana x boleh berada dalam julat 0 hingga 9. 5 akan menjadi pilihan terbaik kami untuk menggantikan '?'.

    • "??" kerana kita perlu memaksimumkan dan kemudian kita menggantikannya dengan 59.

Mari kita lihat kod yang melaksanakan langkah di atas -

Terjemahan bahasa Cina bagi

Contoh

ialah:

Contoh

#include <iostream>
using namespace std;
// function to replace hours
string replaceHours(string s){
   if(s[0] == '?' && s[1] == '?'){
      //Both hour characters are '?'
      // replace with the maximum hour we can achieve 
      s[0] = '2';
      s[1] = '3';
   }
   else if(s[0] == '?'){
      // if the second number of hours is in the range 0 to 3
      // replace by 2
      if(s[1] < 4){
         s[0] = '2';
      }
      else{
         s[0] = '1'; // otherwise replace by one 
      }
   }
   else if(s[1] == '?'){
      // if the first character is '2' we can go only upto 3
      if(s[0] == '2'){
         s[1] = '3';
      }
      else{
         s[1] = '9'; // else we can go for 9 
      }
   }
   return s;
}
// function to replace minutes
string replaceMinutes(string s){
   if(s[3] == '?' && s[4] == '?'){
      // both minutes characters are '?'
      // replace with maximum minutes we can acheive 
      s[3] = '5';
      s[4] = '9';
   }
   else if(s[3] == '?'){
      // we can maximum get 5 here 
      s[3] = '5';
   }
   else if(s[4] == '?'){
      // we can get maximum 9 here
      s[4] = '9';
   }
   return s;
}
int main(){
   string str = "2?:3?"; // given string 
   // calling the function for updation of the minutes 
   str = replaceMinutes(str);
   // calling to the function for updation of the hours
   str = replaceHours(str);
   // printing the final answer
   cout<<"The maximum time we can get by replacing ? is: "<< str<<endl;
   return 0;
}
Salin selepas log masuk

Output

The maximum time we can get by replacing ? is: 23:39
Salin selepas log masuk

Kerumitan masa dan ruang

Kerumitan masa kod di atas ialah O(1) atau malar kerana kami tidak menggunakan sebarang gelung atau panggilan rekursif, hanya menyemak keadaan if-else

Kerumitan ruang kod di atas ialah O(1) kerana kami tidak menggunakan sebarang ruang tambahan. Juga, untuk fungsi ini, saiz rentetan yang kami lalui sentiasa 5 tetap.

Nota: Untuk menjadikan kod lebih cantik atau boleh dibaca, anda boleh menggunakan pernyataan suis, ia tidak akan menjejaskan kerumitan masa atau ruang dan akan menjadikan pembacaan lebih cekap.

Selain itu, menjejak ke belakang dan menyemak semula adalah penyelesaian, tetapi ini akan menyemak setiap kes dan tidak cekap untuk dilaksanakan di sini.

Kesimpulan

Dalam tutorial ini, kami diberikan rentetan yang mewakili masa dalam format 24 jam. Terdapat beberapa "?" dalam rentetan yang perlu diganti untuk mendapatkan masa sah maksimum, dan aksara dalam rentetan dijamin sentiasa menunjukkan masa yang sah. Kami menggunakan syarat if-else dan dua fungsi untuk menggantikan "?" dengan kes yang sesuai. Memandangkan kami tidak menggunakan sebarang gelung atau fungsi rekursif, kerumitan masa dan ruang kod di atas adalah malar.

Atas ialah kandungan terperinci Maksimumkan nilai yang hilang dalam tempoh masa tertentu, dalam format HH:MM. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:tutorialspoint.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan