使用C++根據給定條件拆分給定的二進位字串,以最大化和
本文旨在解決一個複雜的演算法問題,涉及以最大化從各個元件獲得的累積和的方式分割二進位字串。我們將為讀者提供用於實現程式碼的全面語法大綱,並建議兩種可能的技術來克服這項挑戰。此外,我們將基於上述方法展示兩個真正的完整可執行程式碼。
文法
在深入研究演算法之前,至關重要的是,我們必須熟悉我們將透過即將發布的程式碼範例展示的指定方法的結構。此方法採用二進位字串作為輸入,並透過使用預定條件對所述輸入進行分區來計算其最高可能值。下面說明了這種方法在語法方面的外觀 -
int maximizeSum(string binaryString) { // Implementation of the algorithm goes here }
演算法
現在我們應該討論逐步演算法,以解決透過拆分二進位字串來最大化總和的問題。
程式碼片段 1
初始化兩個變數“maxSum”和“currentSum”,都設定為零。
從左到右遍歷二進位字串。
對於字串中的每個字元 -
如果字元是'0',則將其新增至目前子字串。
如果字元是'1' −
#透過新增目前的「currentSum」來更新「maxSum」。
將`currentSum`重設為零。
遍歷結束後,將最終的「currentSum」與「maxSum」相加。
傳回 `maxSum` 作為結果。
方法一
解決此問題的第一種方法涉及實作上述演算法。讓我們看看對應的程式碼片段 -
範例
#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; }
輸出
Maximum sum: 0
說明
為了方便起見,程式碼首先包含必要的函式庫(“iostream”和“string”)並使用“std”命名空間。
要計算透過拆分二進位字串可實現的最大和,可以使用 `maximizeSum` 函數,該函數以二進位字串作為輸入並傳回輸出。
在這個函數內部初始化了兩個變數 - `maxSum` 和 `currentSum`。前者追蹤到目前為止達到的最大值,而後者計算每個單獨子字串的總和。
使用基於範圍的 for 迴圈我們迭代輸入「binaryString」中的每個字元「c」。
如果目前字元“c”是“0”,我們將其乘以 10 並加上數值“0”來更新“currentSum”。這有效地將“0”附加到目前子字串。
如果目前字元“c”為“1”,則表示目前子字串結束。我們將 `currentSum` 新增至 `maxSum` 以更新迄今為止達到的最大總和,然後將 `currentSum` 重設為零以開始新的子字串。
完成循環後,透過將最後一個子字串的`currentSum`加到前一個`maxSum`中來計算。 `main`函數提供了一個提示,允許使用者輸入一個二進位字串。
「main」函數提供一個提示,允許使用者輸入二進位字串。
輸入字串被傳遞給`maximizeSum`函數,並將傳回的最大和儲存在`result`變數中。
最後,將最大總和顯示給使用者。
方法2
在第二種方法中,我們將透過消除執行整數乘法的需要來優化程式碼。相反,我們將使用位元運算來計算當前總和。讓我們來看看這種方法的程式碼片段 -
範例
#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; }
輸出
Maximum sum: 0
說明
與第一種方法類似,程式碼首先包含必要的函式庫,並使用 `std` 命名空間。
函數`maximizeSum`和函數`main`的定義與第一種方法中的定義相同。
在`maximizeSum`函數中,使用位元左移運算子(`
#相當於乘以 2。然後我們將 0 新增到 `currentSum` 中,因為目前字元是「0」。
兩種方法中其餘的程式碼是相同的。它們接收一個二進位字串作為輸入。使用`maximizeSum`函數來計算分割字串時可能的最大和。然後將這個結果呈現給使用者。
您可以在C 編譯器中編譯並執行這些程式碼,當輸入一個二進位字串時,程式將輸出根據指定條件分割該字串所獲得的最大和。
結論
在本文中,我們探討了根據給定條件分割二進位字串來最大化總和的問題。我們提供了程式碼範例中使用的方法的語法,並提出了兩種解決問題的方法。最初,採用直接演算法,而以下技術透過位元運算優化編碼。儘管這兩種方法都成功地解決了這個問題,但後者提供了更高的效率,因為它消除了整數乘法的必要性。透過理解和實現這些演算法,您可以有效地解決涉及透過拆分二進位字串來最大化總和的類似問題。
以上是使用C++根據給定條件拆分給定的二進位字串,以最大化和的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

快速上手:Java中的JSON數組合併和分割技巧在現代的軟體開發中,資料的格式和傳輸變得愈發重要。其中,JSON(JavaScriptObjectNotation)是一種常用的資料格式,特別適用於前後端互動和資料儲存。在Java開發中,我們經常需要處理JSON物件和JSON數組。本文將介紹如何在Java中合併和拆分JSON數組,以及實現這些操作的技巧和示

如何使用PHPZipArchive實現多個壓縮包的合併和拆分?概述:在開發過程中,有時我們需要將多個壓縮包合併成一個,或將一個壓縮包拆分成多個。 PHP提供了ZipArchive擴展,可以輕鬆完成這些操作。本文將介紹如何使用PHPZipArchive實現多個壓縮包的合併與拆分。合併多個壓縮包首先,我們需要建立一個新的壓縮包,並打開它。然後,循環遍歷要合

在這個問題中,我們需要找到給定字串的最長非遞增子序列。非遞增的意思是字元要麼相同,要麼按降序排列。由於二進位字串僅包含“0”和“1”,因此產生的字串應以“1”開頭並以“0”結尾,或以“0”或“1”開頭和結尾。為了解決這個問題,我們將統計字串每個位置的前綴“1”和後綴“0”,並找到前綴“1”和後綴“0”的最大和。問題陳述-我們給了二進位字串str。我們需要從給定的字串中找到最長的非遞增子序列。範例Input–str="010100"Output–4說明最長的非遞

pack()函數將資料打包到二進位字串中。語法pack(format,args)參數格式-要使用的格式。以下是可能的值-a-NUL填充字串A-空格填充字串h-十六進位字串,低半位元組在前H-十六進位字串,高半位元組在前c-帶符號字元C-無符號字元s-帶符號短字元(始終為16位,機器字節順序)S-無符號短整型(始終為16位,機器字節順序)n-無符號短整型(始終為16位,大端字節順序)v-無符號短整型(始終為16位,小端字節順序)i-有符號整數(取決於機器的大小和字節順序)I-無符號整數(取決

在給定的問題中,我們得到一個由0和1組成的字串;我們需要找出以1開頭的所有排列的總數。由於答案可能是一個巨大的數字,所以我們將其取模1000000007後輸出。 Input:str="10101001001"Output:210Input:str="101110011"Output:56我們將透過應用一些組合數學和建立一些公式來解決這個問題。解的方法在這個方法中,我們將計算0和1的數量。現在假設n是我們字串中出現的1的數量,m是我們字串中出現的0

Python是一門流行的高階程式語言,非常實用且靈活。但是,在使用Python編寫循環時,有時會遇到循環條件錯誤的問題。本文將介紹Python中循環條件錯誤的原因與解決方法。 1.循環條件錯誤的原因循環條件錯誤通常是由於變數值的錯誤或邏輯錯誤所引起的。具體表現為:變數沒有正確地更新。如果循環中的變數沒有正確更新,循環條件將始終保持原樣。條件表達式格式錯誤。如果條

問題陳述我們有一個字串str和一個二進位字串B。兩個字串的長度都等於N。我們需要檢查是否可以透過在字串B中包含不相等字符的任意索引對上多次交換其字符,使字串str成為回文字串。範例範例輸入str=‘AAS’B=‘101’輸出‘YES’Explanation的中文翻譯為:解釋我們可以交換str[1]和str[2],因為B[1]和B[2]不相等。最終的字串可以是'ASA'。輸入str=‘AASS’B=‘1111’輸出‘No’Explanation的中文翻譯為:解釋我們無法讓字串回文,

在本文中,我們將討論一個有趣的問題,涉及字串操作和博弈論領域:「透過刪除非空子字串來清空二進位字串,找到剩餘0最少的玩家」。這個問題探索了使用二進位字串進行競技遊戲的概念。我們的目標是在遊戲結束後找出剩餘0最少的玩家。我們將討論這個問題,提供一個C++程式碼實現,並透過一個例子來解釋這個概念。理解問題陳述給兩個玩家一個二進位字串,他們輪流玩遊戲。在每一回合中,玩家移除至少包含一個「1」的非空子字串。當字串變空或字串中沒有“1”時,遊戲結束。無法採取行動的玩家輸掉遊戲。任務是找到最終0
