C++ มีรายการฟังก์ชันมากมายในการแก้ปัญหาทางคณิตศาสตร์ ฟังก์ชันทางคณิตศาสตร์อย่างหนึ่งคือการหาเลขคี่ที่ N โดยใช้รหัส บทความนี้จะอธิบายวิธีการทั้งหมดในการหาเลข Nth คี่และทำความเข้าใจว่าเลขคี่คืออะไรและตัวเลขใดที่ประกอบเป็นเลขคี่
การหาเลข N ที่เกิดจากเลขคี่เท่านั้น
เลขคี่ให้เศษที่เหลือหารด้วยสอง ดังนั้นเลขคี่สองสามตัวแรกคือ 1,3,5,7,9,11,13,15,17,19...
ในการหาจำนวนที่ต้องการ เรามีสองวิธีที่นี่ -
วิธีที่ 1 − ตรวจสอบทุกจำนวนธรรมชาติไม่ว่าจะเป็นจำนวนคี่หรือไม่และนับทุก ๆ เลขคี่จนกว่าการนับจะเท่ากับ n และไม่นับหากพบจำนวนคู่เช่นข้ามเลขคู่และนับเลขคี่ และให้หมายเลข N ที่จำเป็นที่พบ
วิธีการหาเลข N ที่ประกอบด้วยเลขคี่ทำได้ง่าย เนื่องจากเรากำลังตรวจสอบทุกตัวเลขและนับเลขคี่ แต่ในแง่ของการเขียนโปรแกรมคอมพิวเตอร์ วิธีการนี้ใช้เวลามากในการดำเนินการให้เสร็จสิ้น
วิธีที่ 2 − ทุกตัวเลขที่ประกอบขึ้นจากหลักคี่สามารถมี 1,3,5,7,9 อยู่ท้ายสุดได้ จึงเป็นเลขคี่ ดังนั้นเราจึงตรวจสอบก่อนว่าหมายเลข N เป็น 1,3,5,7,9 หรือไม่ ถ้าใช่ เราก็จะได้คำตอบ มิฉะนั้น เราจะย้ายไปยังตัวเลขอื่นที่เป็นไปได้ ซึ่งก็คือ 11.13,15,17,19 แล้วก็มา 21,23,25,27,29 ซึ่งสร้างรูปแบบ 1 * 10 + {ตัวเลขที่เป็นไปได้ล่าสุด}.
ตัวอย่าง
Last possible numbers are 1,3,5,7,9 Next possible numbers can be found by 1 * 10 + 1 =11 1 * 10 + 3 = 13 1 * 10 + 5 = 15 1 * 10 + 7 = 17 1* 10 + 9 = 19 i.e 11,13,15,17,19
ตัวอย่างโค้ด
ก่อนอื่น เรามาดูกันว่าโค้ดหน้าตาเป็นอย่างไร -
#include<bits/stdc++.h> using namespace std; int main(){ queue<int> q; int cnt = 0, ans = 0; int n; cin >> n; int a[5]={1,3,5,7,9}; for(int i = 0; i < 5;i++){ cnt++; if(cnt == n) ans = a[i]; q.push(a[i]); } if(ans) cout << ans << "\n"; else{ while(true){ int x = q.front(); q.pop(); for(int j = 0; j < 5; j++) { int temp = x * 10 + a[j]; q.push(temp); cnt++; if(cnt == n) ans = temp; } if(ans) break; } cout << ans << "\n"; } return 0; }
ผลลัพธ์
9
(เมื่อเราระบุ 5 เป็นอินพุต เราก็ได้ 9 เป็นเอาต์พุต)
รหัสด้านบนเป็นรหัส C++ เพื่อค้นหาหมายเลข N ที่ประกอบด้วยเลขคี่เท่านั้น เพื่อให้เข้าใจโค้ดนี้ เรามาทำลายโค้ดนี้และทำความเข้าใจแต่ละส่วนเพื่อให้เข้าใจโค้ดที่สมบูรณ์
คำอธิบายโค้ด
ขั้นตอนที่ 1 − รับ n จากผู้ใช้และเริ่มต้นตัวแปรที่ต้องการ
int main() { queue<int> q; int cnt = 0, ans = 0; int n; cin >> n; int a[5]={1,3,5,7,9};
ที่นี่เราสร้างคิวและเริ่มต้นตัวแปร cnt เพื่อนับและเก็บคำตอบ นอกจากนี้เรายังรับข้อมูลจากผู้ใช้โดยใช้ cin และเริ่มต้นอาร์เรย์ด้วยตัวเลขแรกที่เป็นไปได้
ขั้นตอนที่ 2 − เพื่อตรวจสอบว่าพบหมายเลข N ในตัวเลขที่เป็นไปได้เริ่มต้นและจัดเก็บหมายเลขเหล่านั้นในคิวหรือไม่
for(int i = 0; i < 5;i++){ cnt++; if(cnt == n) ans = a[i]; q.push(a[i]); } if(ans) cout << ans << "\n";
ในโค้ดด้านบนนี้ เรากำลังตรวจสอบว่าหมายเลข N มีอยู่ในตัวเลขแรกที่เป็นไปได้หรือไม่ เก็บไว้ในอาร์เรย์และผลักคิวด้วยตัวเลขที่อยู่ในอาร์เรย์ และให้เอาต์พุตหากพบหมายเลข N ในตัวเลขแรกที่เป็นไปได้
ขั้นตอนที่ 3 − ค้นหาหมายเลข N ในตัวเลขที่เป็นไปได้ถัดไปและเปลี่ยนหมายเลขในคิวหากไม่พบหมายเลข Nth
while(true) { int x = q.front(); q.pop(); for(int j = 0; j < 5; j++) { int temp = x * 10 + a[j]; q.push(temp); cnt++; if(cnt == n) ans = temp; } if(ans) break; } cout << ans << "\n"; }
สุดท้าย เรากำลังดึงทุกตัวเลขออกจากคิวและสร้างตัวเลขที่เป็นไปได้ถัดไปโดยใช้สูตร { x * 10 + เลขคี่สุดท้าย } และตรวจสอบว่าค่าของ cnt เท่ากับ n หรือไม่
บทสรุป
ในบทความนี้ เรามีปัญหาคือ วิธีค้นหาเลขคี่ที่ N ที่ประกอบด้วยเลขคี่เท่านั้น และเราพบวิธีการสองวิธีในการทำเช่นนั้น วิธีแรกเข้าใจง่าย เนื่องจากเป็นการตรวจสอบแต่ละหมายเลขและข้ามเลขคู่ แต่ต้องใช้เวลาในการคำนวณ
วิธีที่สองคือการใช้คิวและจัดเก็บเลขคี่ในนั้นและค้นหาตัวเลขที่เป็นไปได้ถัดไปด้วยสูตรที่เราได้เห็นข้างต้น ความซับซ้อนของแนวทางนี้คือ O(n)
เราสร้างโปรแกรมในภาษา C++ เพื่อค้นหาหมายเลข N ที่ประกอบด้วยเลขคี่เท่านั้น เราสามารถทำโปรแกรมนี้ในภาษาอื่น ๆ เช่น C, python, java หรือภาษาโปรแกรมอื่น ๆ หวังว่าบทความนี้จะเป็นประโยชน์เพราะจะให้ความรู้ที่สมบูรณ์เกี่ยวกับแนวทางในการแก้ปัญหา