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 次浏览

启动您的 职业生涯

完成课程后获得认证

开始
广告