Trong bài toán này, chúng ta được cho một số. Nhiệm vụ là in tất cả các số 3 chữ số lặp lại.
Ví dụ để hiểu vấn đề:
Đầu vào: 98769876598765 Đầu ra: 987: 3 lần 876: 3 lần 765: 2 lần
Để giải quyết, ta dùng số lớn lưu dưới dạng chuỗi. Các chữ số được đếm như ký tự. Ta kiểm tra 3 số đầu, sau đó từ chỉ mục 3 đến cuối lấy số mới 3 chữ số. Kiểm tra các số 3 chữ số tiếp theo và đếm tần suất. Cuối cùng in tất cả số 3 chữ số có tần suất > 1.
Ví Dụ
Chương trình triển khai giải pháp:
#include <bits/stdc++.h>
using namespace std;
void printRepeatingNumber(string s) {
int i = 0, j = 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 << " lần\n";
}
}
int main() {
string num = "98769876598765";
cout << "Tất cả số 3 chữ số lặp lại là:\n";
printRepeatingNumber(num);
return 0;
}
Đầu Ra
Tất cả số 3 chữ số lặp lại là: 765: 2 lần 876: 3 lần 987: 3 lần