Computer >> Máy Tính >  >> Lập trình >> C ++

Tìm số thứ N chỉ được tạo thành từ các chữ số lẻ bằng C ++

C ++ có một danh sách khổng lồ các hàm để giải quyết các vấn đề toán học. Một trong những hàm toán học là tìm chữ số lẻ thứ N bằng cách sử dụng mã. Bài viết này sẽ mô tả phương pháp hoàn chỉnh để tìm số lẻ thứ N và hiểu các số lẻ là gì và những số nào được tạo thành từ các chữ số lẻ.

Chỉ tìm số thứ N được tạo thành từ các chữ số lẻ

Các số lẻ cho phần dư khi chia cho hai, vì vậy các số lẻ đầu tiên là 1,3,5,7,9,11,13,15,17,19 ...

Để tìm số được yêu cầu, chúng tôi có hai cách tiếp cận ở đây -

Cách tiếp cận 1 - Kiểm tra mọi số tự nhiên, xem nó có phải là số lẻ hay không và đếm từng số lẻ cho đến khi số đếm trở thành n, và không đếm nếu số đó là chẵn, tức là bỏ qua số chẵn và đếm số lẻ và đưa ra số thứ N bắt buộc được tìm thấy.

Phương pháp tìm số thứ N gồm các chữ số lẻ này có thể đơn giản vì chúng ta chỉ kiểm tra mọi số và đếm các số lẻ, nhưng về mặt lập trình máy tính, phương pháp này cần nhiều thời gian để hoàn thành công việc này.

Cách tiếp cận 2 - Mọi số tạo thành từ các chữ số lẻ đều có thể có 1,3,5,7,9 tận cùng nên đều là số lẻ. Vì vậy, trước tiên chúng ta kiểm tra xem số thứ N là 1,3,5,7,9 nếu có, sau đó chúng ta nhận được câu trả lời; nếu không, chúng tôi chuyển sang các số có thể khác, là 11,13,15,17,19 và sau đó đến 21,23,25,27,29. Điều này tạo thành mẫu 1 * 10 + {các số cuối cùng có thể}.

Ví dụ

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

Mã mẫu

Đầu tiên, hãy xem mã trông như thế nào -

#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;
}

Đầu ra

9

(Khi chúng tôi cung cấp 5 làm đầu vào, thì chúng tôi lấy 9 làm đầu ra)

Đoạn mã trên là mã C ++ để tìm số thứ N chỉ gồm các chữ số lẻ. Để hiểu mã này, hãy ngắt đoạn mã này và hiểu từng phần của nó để hiểu mã hoàn chỉnh.

Giải thích mã

Bước 1 - Lấy n từ người dùng và khởi tạo biến cần thiết.

int main() {
   queue<int> q;
   int cnt = 0, ans = 0;
   int n;
   cin >> n;
   int a[5]={1,3,5,7,9};

Ở đây chúng ta tạo một hàng đợi và khởi tạo biến cnt để giữ số lượng và ans để lưu trữ các câu trả lời. Ngoài ra, chúng tôi đang lấy dữ liệu đầu vào từ người dùng bằng cách sử dụng cin và khởi tạo một mảng với các số đầu tiên có thể.

Bước 2 - Để kiểm tra xem số thứ N có được tìm thấy trong các số có thể ban đầu hay không và lưu trữ các số đó trong hàng đợi.

for(int i = 0; i < 5;i++){
   cnt++;
   if(cnt == n)
      ans = a[i];
      q.push(a[i]);
   }
   if(ans)
      cout << ans << "\n";

Trong các mã trên, chúng tôi đang kiểm tra xem số thứ N có sẵn trong các số đầu tiên có thể, được lưu trữ trong một mảng hay không và đẩy hàng đợi với các số có trong mảng và đưa ra kết quả nếu số thứ N được tìm thấy trong các số đầu tiên có thể.

Bước 3 - Tìm số thứ N trong các số có thể tiếp theo và thay đổi các số trong hàng đợi nếu số thứ N. không được tìm thấy.

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";
}

Cuối cùng, chúng tôi sẽ lấy ra mọi số từ hàng đợi và tạo số tiếp theo có thể từ số đó bằng cách sử dụng công thức {x * 10 + số lẻ cuối cùng} và kiểm tra xem giá trị của cnt có bằng n hay không.

Kết luận

Trong bài viết này, chúng tôi gặp một vấn đề:làm thế nào để tìm số lẻ thứ N chỉ gồm các chữ số lẻ và chúng tôi đã tìm thấy hai cách tiếp cận để làm điều đó. Cách tiếp cận đầu tiên rất đơn giản để hiểu vì nó chỉ kiểm tra từng số và bỏ qua các số chẵn, nhưng nó mất thời gian tính toán.

Cách tiếp cận thứ hai là sử dụng một hàng đợi và lưu trữ các số lẻ trong đó và tìm các số có thể tiếp theo bằng một công thức, chúng ta đã thấy ở trên. Độ phức tạp của phương pháp này là O (n).

Chúng tôi đã tạo một chương trình bằng C ++ để tìm số thứ N chỉ gồm các chữ số lẻ; chúng ta có thể thực hiện chương trình này bằng bất kỳ ngôn ngữ nào khác như C, python, java hoặc bất kỳ ngôn ngữ lập trình nào khác. Hy vọng bạn thấy bài viết này hữu ích vì nó cung cấp kiến ​​thức đầy đủ về cách tiếp cận để giải quyết vấn đề.