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

นับจำนวนสตริงย่อยที่มีค่าตัวเลขมากกว่า X ใน C++


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