ในบทช่วยสอนนี้ เราจะเขียนโปรแกรมที่ตรวจสอบว่าตัวเลขที่ระบุนั้นเป็น หมายเลข 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
บทสรุป
หากคุณมีข้อสงสัยใดๆ ในบทแนะนำ โปรดระบุในส่วนความคิดเห็น