ในบทช่วยสอนนี้ เราจะเขียนโปรแกรมที่ตรวจสอบว่าตัวเลขที่ระบุนั้นเป็น หมายเลข Keith หรือไม่ หรือเปล่า
หมายเลข n เรียกว่าหมายเลข Keith หากปรากฏในลำดับที่สร้างโดยใช้ตัวเลข ลำดับมี n เทอมแรกเป็นตัวเลขของตัวเลข n และคำศัพท์อื่นๆ จะถูกประเมินซ้ำเป็นผลรวมของ n เทอมก่อนหน้า
มาดูขั้นตอนการแก้ปัญหากัน
- เริ่มต้นหมายเลข n.
- เริ่มต้นองค์ประกอบเวกเตอร์ว่างเพื่อจัดเก็บลำดับ
- นับตัวเลขและเพิ่มทุกหลักใน vecor
- ย้อนกลับเวกเตอร์หลัก
- เริ่มต้นตัวแปรที่มี 0 เรียกว่าองค์ประกอบถัดไป
- เขียนลูปที่วนซ้ำจนกว่าองค์ประกอบถัดไปจะน้อยกว่า n.
- เพิ่ม n หลักสุดท้ายเพื่อรับองค์ประกอบถัดไป
- เพิ่มองค์ประกอบถัดไปให้กับเวกเตอร์
- คืนค่า จริง หากองค์ประกอบถัดไปเท่ากับ n อย่างอื่นเป็นเท็จ
ตัวอย่าง
มาดูโค้ดกันเลย
#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
บทสรุป
หากคุณมีข้อสงสัยใดๆ ในบทแนะนำ โปรดระบุในส่วนความคิดเห็น