Chúng tôi được cung cấp với một chuỗi chỉ gồm 0 và 1. Chuỗi đại diện cho một số nhị phân được đọc từ trái sang phải. tức là 001 là 4 chứ không phải 1. Mục tiêu là tìm tất cả các chuỗi con đại diện cho một số thập phân chẵn.
Chúng tôi sẽ làm điều này bằng cách kiểm tra giá trị đầu tiên của tất cả các chuỗi con, nếu nó là 0 thì số là chẵn nếu 1 thì số sẽ là số lẻ. Số lượng tăng dần theo độ dài-i vì tất cả các chuỗi con có sbstr [0] =’0’ này sẽ ở dạng số thập phân chẵn.
Hãy cho chúng tôi hiểu với các ví dụ.
Đầu vào - str =”101”
Đầu ra - Đếm các chuỗi con có giá trị thập phân chẵn trong một chuỗi nhị phân là - 2
Giải thích - Các chuỗi con có thể có là:10, 11, 01, 0, 1 trong số đó 01 là 2 và 0 là 0, 2 là chẵn.
Đầu vào - str =”111”
Đầu ra - Đếm các chuỗi con có giá trị thập phân chẵn trong một chuỗi nhị phân là - 0
Giải thích - Các chuỗi con có thể có là - 11,1 trong số đó không có chuỗi nào là chẵn.
Phương pháp tiếp cận được sử dụng trong chương trình dưới đây như sau
-
Chúng tôi lấy một chuỗi str chỉ là 0 và 1.
-
Lưu trữ độ dài của str trong len =str.length ()
-
Hàm count_even (string str, int length) lấy chuỗi và độ dài của nó và trả về số lượng các chuỗi con tạo thành một số thập phân chẵn.
-
Traverse chuỗi bằng vòng lặp FOR
-
Bắt đầu từ chỉ mục i =0 đến i
-
Nếu bất kỳ str [i] ==’0’ nào có nghĩa là tất cả các chuỗi con bắt đầu từ nó sẽ ở dạng số thập phân chẵn.
-
Số lượng tăng lên dưới dạng chiều dài-i.
-
Kết quả là số lượt trả lại.
Ví dụ
#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; }
Đầu ra
Nếu chúng ta chạy đoạn mã trên, nó sẽ tạo ra kết quả sau -
Count of even decimal value substrings in a binary string are: 9