C++中計算二進位制字串中偶數十進位制值子串的數量


我們得到一個僅包含 0 和 1 的字串。該字串表示從左到右讀取的二進位制數,例如 001 表示 4 而不是 1。目標是找到所有表示偶數十進位制數的子串。

我們將透過檢查所有子串的第一個值來做到這一點,如果它是 0,則數字為偶數;如果它是 1,則數字為奇數。將計數增加 length-i,因為所有以 sbstr[0]=’0’ 開頭的子串在十進位制中都將是偶數。

讓我們透過示例來理解。

輸入 − str=”101”

輸出 − 二進位制字串中偶數十進位制值子串的數量為 2

解釋 − 可能的子串有:10、11、01、0、1,其中 01 是 2,0 是 0,共有 2 個偶數。

輸入 − str=”111”

輸出 − 二進位制字串中偶數十進位制值子串的數量為 0

解釋 − 可能的子串有 11、1,其中沒有偶數。

下面程式中使用的演算法如下

  • 我們將一個字串 str 作為只包含 0 和 1 的字串。

  • 將 str 的長度儲存在 len=str.length() 中

  • 函式 count_even(string str, int length) 獲取字串及其長度,並返回構成偶數十進位制數的子串的數量。

  • 使用 FOR 迴圈遍歷字串

  • 從索引 i=0 到 i<len 開始,從左到右讀取二進位制數。

  • 如果任何 str[i]==’0’,則表示所有從此開始的子串在十進位制中都是偶數。

  • 將計數增加 length-i。

  • 返回計數作為結果。

示例

 線上演示

#include <bits/stdc++.h>
using namespace std;
int count_even(string str, int length){
   int count = 0;
   for (int i = 0; i < length; i++){
      if (str[i] == '0'){
         count += (length - i);
      }
   }
   return count;
}
int main(){
   string str = "00111";
   int len = str.length();
   cout<<"Count of even decimal value substrings in a binary string are: "<<count_even(str, len) << endl;
   return 0;
}

輸出

如果我們執行上面的程式碼,它將生成以下輸出:

Count of even decimal value substrings in a binary string are: 9

更新於:2020年8月31日

166 次瀏覽

啟動您的 職業生涯

完成課程後獲得認證

開始
廣告
© . All rights reserved.