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

พิมพ์ตัวเลข 3 หลักที่ซ้ำกันในตัวเลขใหญ่ใน C++

ภาพรวมปัญหา

ได้รับตัวเลขขนาดใหญ่ (เก็บเป็นสตริง) ต้องพิมพ์ตัวเลข 3 หลักที่ซ้ำกันพร้อมจำนวนครั้ง

ตัวอย่าง

Input: 98769876598765
Output:
987: 3 times
876: 3 times
765: 2 times

วิธีแก้ปัญหา

  1. เก็บตัวเลขเป็นสตริง
  2. อ่าน 3 หลักแรก คำนวณค่า
  3. เลื่อนหน้าต่างขนาด 3 ไปทีละหลัก (sliding window)
  4. นับความถี่ด้วย Map
  5. พิมพ์เฉพาะที่ความถี่ > 1

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

#include <bits/stdc++.h>
using namespace std;

void printRepeatingNumber(string s) {
    int i = 0, val = 0;
    map<int, int> threeDigitNumber;
    
    val = (s[0] - '0') * 100 + (s[1] - '0') * 10 + (s[2] - '0');
    threeDigitNumber[val] = 1;
    
    for (i = 3; i < s.length(); i++) {
        val = (val % 100) * 10 + s[i] - '0';
        if (threeDigitNumber.find(val) != threeDigitNumber.end()) {
            threeDigitNumber[val] = threeDigitNumber[val] + 1;
        } else {
            threeDigitNumber[val] = 1;
        }
    }
    
    for (auto number : threeDigitNumber) {
        int key = number.first;
        int value = number.second;
        if (value > 1)
            cout << key << ": " << value << " times\n";
    }
}

int main() {
    string num = "98769876598765";
    cout << "All 3 digit repeating numbers are:\n";
    printRepeatingNumber(num);
    return 0;
}

ผลลัพธ์ (Output)

All 3 digit repeating numbers are:
765: 2 times
876: 3 times
987: 3 times