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 หรือภาษาโปรแกรมอื่น ๆ หวังว่าบทความนี้จะเป็นประโยชน์เพราะจะให้ความรู้ที่สมบูรณ์เกี่ยวกับแนวทางในการแก้ปัญหา