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