हमें एक प्राकृत संख्या दी गई है मान लीजिए, संख्या और कार्य उन सभी प्राकृत संख्याओं की गणना करना है जिनके सभी क्रमपरिवर्तन उस संख्या से अधिक हैं।
हम निम्नलिखित शर्तों के साथ काम कर रहे हैं -
-
डेटा केवल प्राकृतिक संख्या होना चाहिए
-
किसी प्राकृत संख्या के सभी संभावित क्रमपरिवर्तन या व्यवस्था दी गई संख्या के बराबर या उससे अधिक होनी चाहिए। उदाहरण के लिए, संख्या 20 है
-
1 यानी 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20<से शुरू होकर 20 तक की सभी संख्याओं पर विचार करें। /पी>
-
अब उन संख्याओं की जाँच करें जिनकी व्यवस्था या क्रमचय दी गई संख्या के बराबर या उससे अधिक है अर्थात 20। संख्याएँ 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। तो गिनती 18 होगी।
-
इनपुट - संख्या =10
आउटपुट - गिनती 9 है
स्पष्टीकरण - संख्या 1, 2, 3, 4, 5, 6, 7, 8, 9 वे संख्याएँ हैं जो किसी भी तरह से व्यवस्थित करने पर संख्या के बराबर होती हैं।
इनपुट - संख्या =13
आउटपुट - गिनती 12 है
स्पष्टीकरण - संख्याएं 1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 12<21, 13<31 वे संख्याएं हैं जो किसी भी तरीके से व्यवस्थित करने पर संख्या से बड़ी के बराबर होती हैं।
नीचे दिए गए प्रोग्राम में इस्तेमाल किया गया तरीका इस प्रकार है
-
संख्या संख्या का मान डालें
-
max_size को 9 पर सेट करें क्योंकि हमेशा कम से कम 9 संख्याएँ होंगी जिनका क्रमपरिवर्तन स्वयं संख्या के बराबर या उससे अधिक होगा।
-
लूप को 0 से max_size तक शुरू करें
-
लूप के अंदर, एक सूची प्रकार चर बनाएं और जांचें कि क्या मैं संख्या से कम या बराबर है यदि हां तो सूची में i डालें और गिनती को 1 से बढ़ाएं
-
सूची को अंत से शुरुआत तक पार करें और पहले तत्व से 9 तक एक और लूप शुरू करें।
-
जांचें कि क्या अस्थायी <=num फिर सूची में सबसे आगे अस्थायी धक्का दें और गिनती को 1 से बढ़ाएं
-
गिनती लौटाएं
-
परिणाम प्रिंट करें।
उदाहरण
#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;
} आउटपुट
यदि हम उपरोक्त कोड चलाते हैं तो हमें निम्न आउटपुट मिलेगा -
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