ในบทช่วยสอนนี้ เราจะเขียนโปรแกรมเพื่อตรวจสอบว่าตัวเลขที่กำหนดเป็น Keith Number หรือไม่
ตัวเลข n เรียกว่า Keith number หากมันปรากฏในลำดับที่สร้างขึ้นจากหลักของมันเอง ลำดับนี้มี n พจน์แรกเป็นหลักของตัวเลข n และพจน์ถัดไปคำนวณได้จากผลรวมของ n พจน์ก่อนหน้า
ขั้นตอนการแก้ปัญหา
- กำหนดค่าเริ่มต้นของตัวเลข n
- กำหนดเวกเตอร์ว่างชื่อ elements เพื่อเก็บลำดับ
- นับจำนวนหลักและเพิ่มทุกหลักเข้าไปในเวกเตอร์
- กลับลำดับของเวกเตอร์หลัก
- กำหนดตัวแปรชื่อ next element เริ่มต้นเป็น 0
- เขียนลูปที่วนจนกว่า next element จะมากกว่าหรือเท่ากับ n
- บวก n หลักสุดท้ายเพื่อหา next element
- เพิ่ม next element เข้าไปในเวกเตอร์
- คืนค่า true ถ้า next element เท่ากับ n มิฉะนั้น false
ตัวอย่างโค้ด
#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;
}
ผลลัพธ์
หากรันโค้ดด้านบน จะได้ผลลัพธ์ดังนี้:
No Yes Yes
สรุป
หากมีข้อสงสัยเกี่ยวกับบทช่วยสอนนี้ สามารถถามได้ในส่วนความคิดเห็น