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

Đếm số tự nhiên có tất cả hoán vị lớn hơn số đó trong C ++


Chúng ta được cho một số tự nhiên, giả sử là num và nhiệm vụ là tính tổng số tất cả các số tự nhiên có tất cả các hoán vị đều lớn hơn số đó.

Chúng tôi đang làm việc với các điều kiện sau -

  • Dữ liệu chỉ nên là số tự nhiên

  • Tất cả các hoán vị hoặc sắp xếp có thể có của một số tự nhiên phải bằng hoặc lớn hơn số đã cho. Ví dụ, con số là 20

    • Hãy xem xét tất cả các số cho đến 20 bắt đầu từ 1, tức là 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20

    • Bây giờ hãy kiểm tra những số có sự sắp xếp hoặc hoán vị bằng hoặc lớn hơn số đã cho, tức là 20. Các số là 1, 2, 3, 4, 5, 6, 7, 8, 9, 11 =11, 12 <21, 13 <31 , 14 <41, 15 <51, 16 <61, 17 <71, 18 <81, 19 <91. Vì vậy, số lượng sẽ là 18.

Đầu vào - num =10

Đầu ra - số đếm là 9

Giải thích - các số 1, 2, 3, 4, 5, 6, 7, 8, 9 là các số bằng với số khi được sắp xếp theo cách bất kỳ.

Đầu vào - num =13

Đầu ra - số đếm là 12

Giải thích - các số 1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 12 <21, 13 <31 là các số có giá trị lớn hơn số khi được sắp xếp theo bất kỳ cách nào.

Phương pháp tiếp cận được sử dụng trong chương trình dưới đây như sau

  • Nhập giá trị của số num

  • Đặt max_size thành 9 vì sẽ luôn có ít nhất 9 số có hoán vị bằng hoặc lớn hơn chính số đó.

  • Bắt đầu vòng lặp từ 0 cho đến max_size

  • Bên trong vòng lặp, hãy tạo một biến kiểu danh sách và kiểm tra xem tôi có nhỏ hơn hoặc bằng num NẾU có, sau đó chèn i vào danh sách và tăng số lượng lên 1

  • Duyệt qua danh sách từ cuối cho đến đầu và bắt đầu một vòng lặp khác từ phần tử đầu tiên cho đến 9.

  • Kiểm tra xem temp <=num rồi đẩy nhiệt độ lên trước trong danh sách và tăng số lượng lên 1

  • Trả lại số lượng

  • In kết quả.

Ví dụ

#include<bits/stdc++.h>
using namespace std;
//function to Count natural numbers whose
//all permutation are greater than that number
void count(int num){
   int count = 0;
   int max_size = 9;
   for (int i = 1; i <= max_size; i++){
      list<int> lists;
      if (i <= num){
         //insert element at the end of the list
         lists.push_back(i);
         count = count + 1;
      }
      //iterator starts from the last of the list
      for(auto iter = lists.end(); iter != lists.begin(); ++iter){
         int first_ele = lists.front();
         lists.pop_front();
         for (int next = first_ele%10; next <= 9; next++){
            int temp = first_ele*10 + next;
            if (temp <= num){
               lists.push_front(temp);
               count++;
            }
         }
      }
   }
   cout<<"count of num "<<num <<" is "<<count<<endl;
}
int main(){
   count(1);
   count(9);
   count(7);
   count(0);
   count(12);
   return 0;
}

Đầu ra

Nếu chúng ta chạy đoạn mã trên, chúng ta sẽ nhận được kết quả sau -

count of num 1 is 1
count of num 9 is 9
count of num 7 is 7
count of num 0 is 0
count of num 12 is 11