Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Pisahkan rentetan binari yang diberikan berdasarkan keadaan tertentu menggunakan C++ untuk memaksimumkan jumlah

Pisahkan rentetan binari yang diberikan berdasarkan keadaan tertentu menggunakan C++ untuk memaksimumkan jumlah

PHPz
PHPzke hadapan
2023-09-04 10:21:07935semak imbas

Pisahkan rentetan binari yang diberikan berdasarkan keadaan tertentu menggunakan C++ untuk memaksimumkan jumlah

Artikel ini bertujuan untuk menyelesaikan masalah algoritma kompleks yang melibatkan pembahagian rentetan binari dengan cara yang memaksimumkan jumlah terkumpul yang diperoleh daripada komponen individu. Kami akan menyediakan pembaca dengan garis besar sintaks yang komprehensif untuk melaksanakan kod dan mencadangkan dua teknik yang mungkin untuk mengatasi cabaran ini. Tambahan pula, kami akan menunjukkan dua kod boleh laku lengkap sebenar berdasarkan kaedah di atas.

Tatabahasa

Sebelum mendalami algoritma, adalah penting untuk kita membiasakan diri dengan struktur kaedah tertentu yang akan kami tunjukkan melalui contoh kod yang akan datang. Kaedah ini mengambil rentetan binari sebagai input dan mengira nilai tertingginya dengan membahagikan input tersebut menggunakan syarat yang telah ditetapkan. Begini cara pendekatan ini kelihatan secara sintaksis -

int maximizeSum(string binaryString) {
   // Implementation of the algorithm goes here
}

Algoritma

Sekarang kita harus membincangkan algoritma langkah demi langkah untuk menyelesaikan masalah memaksimumkan jumlah dengan membelah rentetan binari.

Coretan Kod 1

  • Mulakan dua pembolehubah "maxSum" dan "currentSum", kedua-duanya ditetapkan kepada sifar.

  • Melintasi rentetan binari dari kiri ke kanan.

  • Untuk setiap aksara dalam rentetan -

    • Jika aksara ialah '0', tambahkannya pada subrentetan semasa.

    • Jika watak '1' −

      • Kemas kini "maxSum" dengan menambah "currentSum" semasa.

      • Tetapkan semula `currentSum` kepada sifar.

  • Selepas traversal selesai, tambahkan "currentSum" dan "maxSum" akhir.

  • Kembalikan `maxSum` sebagai hasilnya.

Kaedah 1

Cara pertama untuk menyelesaikan masalah ini melibatkan pelaksanaan algoritma di atas. Mari lihat coretan kod yang sepadan -

Contoh

#include <iostream>
#include <string>
using namespace std;

int maximizeSum(string binaryString) {
   int maxSum = 0;
   int currentSum = 0;

   for (char c : binaryString) {
      if (c == '0') {
         currentSum = currentSum * 10 + (c - '0');
      } else {
         maxSum += currentSum;
         currentSum = 0;
      }
   }

   maxSum += currentSum;
   return maxSum;
}

int main() {
   string binaryString = "1001101001";
    
   int result = maximizeSum(binaryString);
   cout << "Maximum sum: " << result << endl;

   return 0;
}

Output

Maximum sum: 0

Arahan

  • Untuk kemudahan, kod pertama sekali termasuk perpustakaan yang diperlukan ("iostream" dan "rentetan") dan menggunakan ruang nama "std".

  • Untuk mengira jumlah maksimum yang boleh dicapai dengan membelah rentetan binari, anda boleh menggunakan fungsi `maximizeSum`, yang mengambil rentetan binari sebagai input dan mengembalikan output.

  • Dua pembolehubah dimulakan dalam fungsi ini - `maxSum` dan `currentSum`. Yang pertama menjejaki nilai maksimum yang dicapai setakat ini, manakala yang terakhir mengira jumlah setiap subrentetan individu.

  • Menggunakan julat untuk gelung, kami mengulangi setiap aksara "c" dalam input "binaryString".

  • Jika aksara semasa "c" ialah "0", kami mendarabkannya dengan 10 dan menambah nilai "0" untuk mengemas kini "currentSum". Ini secara berkesan menambahkan "0" pada subrentetan semasa.

  • Jika aksara semasa "c" ialah "1", ini bermakna subrentetan semasa tamat. Kami menambah `currentSum` kepada `maxSum` untuk mengemas kini jumlah maksimum yang dicapai setakat ini, kemudian menetapkan semula `currentSum` kepada sifar untuk memulakan subrentetan baharu.

  • Selepas melengkapkan gelung, ia dikira dengan menambahkan `currentSum` subrentetan terakhir pada `maxSum` sebelumnya. Fungsi `utama` menyediakan gesaan yang membolehkan pengguna memasukkan rentetan binari.

  • Fungsi "utama" menyediakan gesaan yang membolehkan pengguna memasukkan rentetan binari.

  • Rentetan input dihantar ke fungsi `maximizeSum` dan jumlah maksimum yang dikembalikan disimpan dalam pembolehubah `hasil`.

  • Akhir sekali, jumlah maksimum dipaparkan kepada pengguna.

Kaedah 2

Dalam pendekatan kedua, kami akan mengoptimumkan kod dengan menghapuskan keperluan untuk melakukan pendaraban integer. Sebaliknya, kami akan menggunakan operasi bitwise untuk mengira jumlah semasa. Mari kita lihat coretan kod pendekatan ini -

Contoh

#include <iostream>
#include <string>
using namespace std;

int maximizeSum(string binaryString) {
   int maxSum = 0;
   int currentSum = 0;

   for (char c : binaryString) {
      if (c == '0') {
         currentSum = (currentSum << 1) + 0;
      } else {
         maxSum += currentSum;
         currentSum = 0;
      }
   }

   maxSum += currentSum;
   return maxSum;
}

int main() {
   string binaryString = "10110010"; // Assumed binary string
   int result = maximizeSum(binaryString);
   cout << "Maximum sum: " << result << endl;

   return 0;
}

Output

Maximum sum: 0

Arahan

  • Sama seperti kaedah pertama, kod terlebih dahulu termasuk perpustakaan yang diperlukan dan menggunakan ruang nama `std`.

  • Takrifan fungsi `maximizeSum` dan fungsi `utama` adalah sama seperti dalam kaedah pertama.

  • Dalam fungsi `maximizeSum`, gunakan operator anjakan bit kiri (`

  • Bersamaan dengan darab 2. Kemudian kami menambah 0 kepada `currentSum` kerana aksara semasa ialah "0".

  • Selebihnya kod adalah sama dalam kedua-dua kaedah. Mereka menerima rentetan binari sebagai input. Gunakan fungsi `maximizeSum` untuk mengira jumlah maksimum yang mungkin apabila membelah rentetan. Hasil ini kemudiannya dibentangkan kepada pengguna.

Anda boleh menyusun dan menjalankan kod ini dalam pengkompil C++ Apabila rentetan binari dimasukkan, program akan mengeluarkan jumlah maksimum yang diperoleh dengan membahagikan rentetan mengikut syarat yang ditetapkan.

Kesimpulan

Dalam artikel ini, kami meneroka masalah memaksimumkan jumlah dengan membelah rentetan binari berdasarkan syarat yang diberikan. Kami menyediakan sintaks kaedah yang digunakan dalam contoh kod dan mencadangkan dua cara untuk menyelesaikan masalah. Pada mulanya, aritmetik langsung digunakan, manakala teknik berikut mengoptimumkan pengekodan melalui operasi bitwise. Walaupun kedua-dua kaedah berjaya menyelesaikan masalah, kaedah kedua menawarkan kecekapan yang lebih tinggi kerana ia menghapuskan keperluan untuk pendaraban integer. Dengan memahami dan melaksanakan algoritma ini, anda boleh menyelesaikan masalah serupa dengan cekap melibatkan memaksimumkan jumlah dengan membelah rentetan binari.

Atas ialah kandungan terperinci Pisahkan rentetan binari yang diberikan berdasarkan keadaan tertentu menggunakan C++ untuk memaksimumkan jumlah. 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