Trong hướng dẫn này, chúng ta sẽ viết một chương trình kiểm tra xem số cho trước có phải là Số Keith hay không.
Số N được gọi là số Keith nếu nó xuất hiện trong dãy được sinh từ các chữ số của nó. Dãy có N số hạng đầu là các chữ số của N, các số hạng tiếp theo được tính đệ quy là tổng của N số hạng trước.
Các bước giải quyết
- Khởi tạo số N.
- Khởi tạo vector rỗng lưu dãy số.
- Đếm chữ số và thêm từng chữ số vào vector.
- Đảo ngược vector chữ số.
- Khởi tạo biến nextElement = 0.
- Viết vòng lặp cho đến khi nextElement >= N:
- Tính nextElement = tổng N số hạng cuối.
- Thêm nextElement vào vector.
- Trả về true nếu nextElement == N, ngược lại false.
Ví dụ
Dưới đây là mã nguồn C++:
#include <bits/stdc++.h>
using namespace std;
bool isKeithNumber(int n) {
vector<int> elements;
int temp = n, digitsCount = 0;
while (temp > 0) {
elements.push_back(temp % 10);
temp = temp / 10;
digitsCount++;
}
reverse(elements.begin(), elements.end());
int nextElement = 0, i = digitsCount;
while (nextElement < n) {
nextElement = 0;
for (int j = 1; j <= digitsCount; j++) {
nextElement += elements[i - j];
}
elements.push_back(nextElement);
i++;
}
return nextElement == n;
}
int main() {
isKeithNumber(43) ? cout << "Yes" << endl : cout << "No" << endl;
isKeithNumber(14) ? cout << "Yes" << endl : cout << "No" << endl;
isKeithNumber(197) ? cout << "Yes" << endl : cout << "No" << endl;
return 0;
}Kết quả
Nếu bạn chạy mã trên, kết quả sẽ là:
No Yes Yes
Kết luận
Nếu bạn có bất kỳ thắc mắc nào về hướng dẫn này, hãy để lại bình luận bên dưới.