Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

ค้นหาเลข N ที่ประกอบด้วยเลขคี่เท่านั้นโดยใช้ C++


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