Jadual Kandungan
Algoritma
Contoh
Output
Perihalan kod
Contoh kes ujian
Kesimpulan
Rumah pembangunan bahagian belakang C++ Bilangan minimum lilitan pasangan bukan bersebelahan diperlukan untuk mengalih keluar semua sifar dalam rentetan binari

Bilangan minimum lilitan pasangan bukan bersebelahan diperlukan untuk mengalih keluar semua sifar dalam rentetan binari

Sep 04, 2023 pm 01:09 PM
binari flip bukan bersebelahan

Bilangan minimum lilitan pasangan bukan bersebelahan diperlukan untuk mengalih keluar semua sifar dalam rentetan binari

Dalam rentetan binari, membalikkan sepasang bit bersebelahan boleh mengeluarkan satu 0 daripada rentetan dengan mudah. Walau bagaimanapun, apabila kita perlu mengalih keluar semua 0 daripada rentetan binari, kita juga mungkin perlu membalikkan pasangan bit bukan bersebelahan. Dalam artikel ini, kita akan membincangkan cara untuk menentukan bilangan minimum lilitan pasangan bukan bersebelahan yang diperlukan untuk mengalih keluar semua 0 daripada rentetan binari.

Algoritma

Untuk menyelesaikan masalah ini, kami akan menggunakan algoritma tamak yang mudah. Ideanya adalah untuk sentiasa memilih pasangan bit yang paling jauh antara satu sama lain dan mempunyai sekurang-kurangnya satu 0 di antara. Kita kemudian boleh membalikkan dua bit ini, dengan berkesan mengeluarkan 0 daripada rentetan. Kami mengulangi proses ini sehingga semua 0 telah dialih keluar.

Sekarang mari kita laksanakan algoritma ini dalam C++.

Contoh

#include <iostream>
#include <cstring>

using namespace std;

int main() {
   string s;
   s="100101000";
   int n = s.size();
   
   int cnt = 0;
   for (int i = 0; i < n; i++) {
      if (s[i] == '0') {
         cnt++;
         if (i+2 < n && s[i+2] == '0') {
            i += 2;
         }
         else {
            i++;
         }
      }
   }
   
   cout << cnt << endl;
   return 0;
}
Salin selepas log masuk

Output

3
Salin selepas log masuk

Perihalan kod

Kod di atas mengambil rentetan binari sebagai input dan mengira bilangan minimum lambungan pasangan bukan bersebelahan yang diperlukan untuk mengalih keluar semua 0 daripada rentetan. Sekarang mari kita lihat kod secara terperinci.

Pertama, kami mengambil rentetan binari sebagai input dan menyimpannya dalam pembolehubah rentetan "s". Kami juga menyimpan saiz rentetan dalam pembolehubah integer "n".

string s;
cin >> s;
int n = s.size();
Salin selepas log masuk

Seterusnya, kami memulakan pembolehubah "cnt" untuk menyimpan nombor 0 dalam rentetan. Kami kemudian mengulangi rentetan menggunakan gelung for. Untuk setiap 0 yang ditemui, kami menambah kiraan 0s dan menyemak sama ada dua bit seterusnya juga 0s. Jika ya, kami membalikkan pasangan bit dengan meningkatkan indeks sebanyak 2. Jika tidak, kami hanya membalikkan pasangan bit bersebelahan dengan meningkatkan indeks sebanyak 1.

int cnt = 0;
for (int i = 0; i < n; i++) {
   if (s[i] == '0') {
      cnt++;
      if (i+2 < n && s[i+2] == '0') {
         i += 2;
      }
      else {
         i++;
      }
   }
}
Salin selepas log masuk

Akhir sekali, kami mengeluarkan kiraan lilitan pasangan bukan bersebelahan yang diperlukan untuk mengeluarkan semua 0 daripada rentetan.

cout << cnt << endl;
Salin selepas log masuk

Contoh kes ujian

Mari kita pertimbangkan rentetan binari "100101000". Bilangan minimum lilitan pasangan bukan bersebelahan yang diperlukan untuk mengalih keluar semua 0 daripada rentetan ini boleh dikira menggunakan algoritma di atas.

Pertama, kita menghadapi 0 pada kedudukan 2. Kami membalikkan pasangan (1,3) untuk mendapatkan rentetan "110101000". Kemudian kita menghadapi 0 seterusnya pada kedudukan 5. Kami membalikkan pasangan (1,7) untuk mendapatkan rentetan "111101000". Kemudian kita menghadapi 0 seterusnya pada kedudukan 8. Kami membalikkan pasangan (1,9) untuk mendapatkan rentetan "111111000". Sekarang semua 0 telah dialih keluar daripada rentetan.

Bilangan lilitan pasangan bukan bersebelahan yang diperlukan untuk mengeluarkan semua 0 daripada rentetan ialah 3. Kita boleh mengesahkan ini dengan menjalankan kod C++ di atas pada rentetan input "100101000".

Kesimpulan

Dalam artikel ini, kami membincangkan cara menentukan bilangan minimum lilitan pasangan bukan bersebelahan yang diperlukan untuk mengalih keluar semua 0 daripada rentetan binari. Kami menggunakan algoritma tamak mudah untuk menyelesaikan masalah ini dan melaksanakannya dalam kod C++. Kami juga menyediakan contoh kes ujian untuk menggambarkan cara algoritma berfungsi.

Atas ialah kandungan terperinci Bilangan minimum lilitan pasangan bukan bersebelahan diperlukan untuk mengalih keluar semua sifar dalam rentetan binari. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

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

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

Video Face Swap

Video Face Swap

Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Cara membalikkan skrin dalam Eye of Deep Space Cara membalikkan skrin dalam Eye of Deep Space Mar 22, 2024 pm 10:41 PM

Pemain boleh menterbalikkan skrin semasa bermain permainan dalam Eye of Deep Space Ramai pengguna tidak tahu cara menyelak skrin dalam Eye of Deep Space Pemain perlu menghidupkan pilihan untuk menyokong putaran skrin di pusat kawalan dan kemudian kembali ke permainan. Cara menyelak skrin Deep Space Eye 1. Buka skrin telefon anda dan luncurkan ke atas dari bahagian bawah skrin menggunakan jari anda. 2. Kemudian anda boleh membuka pusat kawalan Di sudut kanan atas pusat kawalan adalah suis untuk mematikan putaran skrin. 3. Klik padanya untuk menghidupkan putaran skrin Pada masa ini, anda akan mendapati bahawa ikon mengawal putaran diserlahkan dalam pusat kawalan. 4. Apabila anda membuka aplikasi yang menyokong putaran skrin, ia akan berputar apabila orientasi telefon berubah.

Bagaimana untuk mengira aritmetik binari Bagaimana untuk mengira aritmetik binari Jan 19, 2024 pm 04:38 PM

Aritmetik binari ialah kaedah operasi berdasarkan nombor binari Operasi asasnya termasuk penambahan, penolakan, pendaraban dan pembahagian. Selain operasi asas, aritmetik binari juga termasuk operasi logik, operasi anjakan dan operasi lain. Operasi logik termasuk DAN, ATAU, NOT dan operasi lain, dan operasi anjakan termasuk operasi anjakan kiri dan anjakan kanan. Operasi ini mempunyai peraturan dan keperluan operan yang sepadan.

Kaedah dan teknik bagaimana untuk mencapai kesan membalikkan imej melalui CSS tulen Kaedah dan teknik bagaimana untuk mencapai kesan membalikkan imej melalui CSS tulen Oct 20, 2023 am 10:57 AM

Kaedah dan teknik bagaimana untuk mencapai kesan membalikkan imej melalui CSS tulen Prakata: Dalam pembangunan web, kita selalunya perlu menambah beberapa kesan animasi pada halaman web untuk meningkatkan pengalaman pengguna. Kesan membalikkan gambar adalah salah satu kesan biasa. Ia bukan sahaja mudah dan mudah untuk merealisasikan membalikkan imej melalui CSS tulen, tetapi juga mengelakkan overhed tambahan yang disebabkan oleh penggunaan bahasa lain seperti JavaScript. Artikel ini akan memperkenalkan cara untuk mencapai kesan flip imej melalui CSS tulen, dan memberikan contoh kod khusus. 1. Menggunakan CSS3 transfo

Bagaimana untuk menukar binari kepada perenambelasan menggunakan bahasa C? Bagaimana untuk menukar binari kepada perenambelasan menggunakan bahasa C? Sep 01, 2023 pm 06:57 PM

Nombor binari diwakili oleh 1s dan 0s. Sistem nombor perenambelasan 16-bit ialah {0,1,2,3…..9,A(10),B(11),…F(15)} untuk menukar daripada perwakilan binari kepada perenambelasan Mewakili bahawa bit ID rentetan dikumpulkan ke dalam ketulan 4-bit, dipanggil nibbles bermula dari bahagian yang paling tidak ketara. Setiap blok digantikan dengan nombor heksadesimal yang sepadan. Mari kita lihat contoh untuk mendapatkan pemahaman yang jelas tentang perwakilan nombor heksadesimal dan perduaan. 001111100101101100011101 3 E 5 B&nb

Apakah dua penambahbaikan utama EDVAC? Apakah dua penambahbaikan utama EDVAC? Mar 02, 2023 pm 02:58 PM

EDVAC mempunyai dua penambahbaikan utama: satu ialah penggunaan binari, dan satu lagi ialah penyiapan program yang disimpan, yang secara automatik boleh maju dari satu arahan program ke seterusnya, dan operasinya boleh diselesaikan secara automatik melalui arahan. "Arahan" termasuk data dan program, yang dimasukkan ke dalam peranti memori mesin dalam bentuk kod Iaitu, peranti memori yang sama yang menyimpan data digunakan untuk menyimpan arahan untuk melaksanakan operasi -dipanggil atur cara tersimpan.

HTML, CSS dan jQuery: Bina kesan flip kad yang cantik HTML, CSS dan jQuery: Bina kesan flip kad yang cantik Oct 27, 2023 pm 01:43 PM

HTML, CSS dan jQuery: Bina kesan flip kad yang cantik Dalam reka bentuk web, aplikasi kesan khas boleh meningkatkan interaktiviti dan kesan visual halaman. Kesan flipping kad ialah kesan khas biasa yang boleh membawa pengguna pengalaman menyemak imbas yang lebih jelas dan menarik. Artikel ini akan memperkenalkan cara menggunakan HTML, CSS dan jQuery untuk membina kesan flip kad yang cantik, dan memberikan contoh kod khusus. Pertama, kita perlu menyediakan struktur asas HTML. Kami akan menggunakan dua elemen div untuk mewakili bahagian hadapan kad

Bagaimana untuk membaca fail binari di Golang? Bagaimana untuk membaca fail binari di Golang? Mar 21, 2024 am 08:27 AM

Bagaimana untuk membaca fail binari di Golang? Fail binari ialah fail yang disimpan dalam bentuk binari yang mengandungi data yang boleh dikenali dan diproses oleh komputer. Di Golang, kita boleh menggunakan beberapa kaedah untuk membaca fail binari dan menghuraikannya ke dalam format data yang kita inginkan. Berikut akan memperkenalkan cara membaca fail binari di Golang dan memberikan contoh kod tertentu. Pertama, kita perlu membuka fail binari menggunakan fungsi Buka dari pakej os, yang akan mengembalikan objek fail. Kemudian kita boleh buat

计算机内部采用二进制的主要原因是什么? 计算机内部采用二进制的主要原因是什么? Apr 04, 2019 pm 02:25 PM

计算机采用二进制的主要原因:1、计算机是由逻辑电路组成,逻辑电路通常只有两个状态,开关的接通与断开,这两种状态正好可以用“1”和“0”表示;2、二进制中只使用0和1两个数字,传输和处理时不易出错,因而可以保障计算机具有很高的可靠性。

See all articles