เราได้รับสตริงตัวเลข 0 ถึง 9 สตริงแสดงถึงตัวเลขทศนิยม เป้าหมายคือการค้นหาสตริงย่อยทั้งหมดที่แสดงตัวเลขทศนิยมซึ่งมากกว่าจำนวน X เงื่อนไขคือสตริงย่อยไม่ควรขึ้นต้นด้วย 0 เช่นใน "2021", "02", "021" “0” จะไม่รวมอยู่ด้วย
เราจะทำสิ่งนี้โดยการตรวจสอบค่าแรกของสตริงย่อยทั้งหมด หากมีค่ามากกว่า 0 ให้เริ่มสร้างสตริงย่อยจากดัชนีนั้นโดยแปลงให้เป็นจำนวนเต็มโดยใช้ stoi() หากสตริงย่อย>X เพิ่มขึ้นนับ
ให้เราเข้าใจด้วยตัวอย่าง
ป้อนข้อมูล − str=”123” X=12
ผลผลิต − จำนวนสตริงย่อยที่มีค่าตัวเลขมากกว่า X คือ − 2
คำอธิบาย สตริงย่อย> 12 คือ 123 และ 23
ป้อนข้อมูล − str=”111” X=100
ผลผลิต − จำนวนสตริงย่อยค่าทศนิยมคู่ในสตริงไบนารีคือ − 1
คำอธิบาย เพียง 111 มีค่ามากกว่า 100
แนวทางที่ใช้ในโปรแกรมด้านล่างมีดังนี้
-
เราใช้สตริง str เป็นสตริงของตัวเลขเท่านั้น
-
เก็บความยาวของ str ใน len=str.length()
-
ฟังก์ชั่น more_X(string str, int x) รับสตริงและความยาวของสตริงและส่งกลับจำนวนสตริงย่อยที่สร้างตัวเลขทศนิยมที่มากกว่า X
-
ข้ามสตริงโดยใช้ FOR วน
-
เริ่มจากดัชนี i=0 ถึง i
-
หาก str[i]!='0' ใดๆ หมายความว่าสตริงย่อยทั้งหมดที่เริ่มต้นจากสตริงนั้นจะถูกต้อง
-
เริ่มจากดัชนี j=1 ถึง i+j
-
แปลงสตริงย่อย str.substr(i,j) เป็นทศนิยมโดยใช้ stoi() ถ้ามากกว่า X ให้นับเพิ่ม
-
ผลตอบแทนนับเป็นผลลัพธ์
ตัวอย่าง
#include <bits/stdc++.h> using namespace std; int greater_X(string str, int x){ int count = 0; int len = str.length(); for (int i = 0; i < len; ++i){ if(str[i] != '0'){ for (int j=1; (i + j) <= len; ++j){ if (stoi(str.substr(i, j)) > x){ count++; } } } } return count; } int main(){ string str = "987"; int x = 100; cout<<"Count of number of substrings with numeric value greater than X are: "<<greater_X(str, x); return 0; }
ผลลัพธ์
หากเราเรียกใช้โค้ดข้างต้น มันจะสร้างผลลัพธ์ต่อไปนี้ -
Count of number of substrings with numeric value greater than X are: 1