เราได้รับสตริงของ 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