Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

การนับสตริงย่อยค่าทศนิยมคู่ในสตริงไบนารีใน 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

  • หาก str[i]=='0' ใดๆ หมายความว่าสตริงย่อยทั้งหมดที่เริ่มต้นจะเป็นเลขทศนิยม

  • การเพิ่มขึ้นนับเป็นความยาว-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