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

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

ได้รับสตริงที่ประกอบด้วยตัวเลข 0-9 ซึ่งแทนค่าทศนิยม เป้าหมายคือหาจำนวนซับสตริงที่แทนค่าทศนิยมมากกว่า X โดยเงื่อนไขคือซับสตริงต้องไม่ขึ้นต้นด้วย 0 เช่นใน "2021" ซับสตริง "02", "021", "0" จะไม่นับ

ตัวอย่าง

อินพุต: str = "123", X = 12

เอาต์พุต: 2

คำอธิบาย: ซับสตริงที่ > 12 คือ 123 และ 23

อินพุต: str = "111", X = 100

เอาต์พุต: 1

คำอธิบาย: มีแค่ 111 ที่มากกว่า 100

แนวทางการแก้ปัญหา

  • เก็บความยาวสตริงใน len
  • สร้างฟังก์ชัน greater_X(string str, int x) คืนค่าจำนวนซับสตริงที่มากกว่า X
  • วนลูป for ตัวแปร i จาก 0 ถึง len-1 (อ่านจากซ้ายไปขวา)
  • ถ้า str[i] != '0' ทุกซับสตริงที่เริ่มจาก index นี้จะถูกต้อง
  • วนลูป j จาก 1 ถึง i+j <= len สำหรับความยาวซับสตริง
  • แปลงซับสตริง str.substr(i, j) เป็นตัวเลขด้วย stoi() ถ้ามากกว่า X ให้เพิ่มตัวนับ

ตัวอย่างโค้ด C++

#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