เราได้รับตัวเลขธรรมชาติ สมมุติว่า num และภารกิจคือการคำนวณการนับจำนวนธรรมชาติทั้งหมดที่มีการเรียงสับเปลี่ยนทั้งหมดมากกว่าจำนวนนั้น
เรากำลังดำเนินการตามเงื่อนไขต่อไปนี้ −
-
ข้อมูลควรเป็นตัวเลขธรรมชาติเท่านั้น
-
การเรียงสับเปลี่ยนที่เป็นไปได้ทั้งหมดหรือการจัดเรียงของจำนวนธรรมชาติควรเท่ากับหรือมากกว่าจำนวนที่กำหนด ตัวอย่างเช่น ตัวเลขคือ 20
-
พิจารณาตัวเลขทั้งหมดจนถึง 20 โดยเริ่มจาก 1 เช่น 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 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
-
ป้อนข้อมูล − num =10
ผลผลิต − นับเป็น 9
คำอธิบาย − ตัวเลข 1, 2, 3, 4, 5, 6, 7, 8, 9 เป็นตัวเลขที่เท่ากับจำนวนเมื่อจัดเรียงในลักษณะใดๆ
ป้อนข้อมูล − num =13
ผลผลิต − นับเป็น 12
คำอธิบาย − ตัวเลข 1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 12<21, 13<31 คือจำนวนที่มากกว่าจำนวนเมื่อจัดเรียงในลักษณะใดๆ
แนวทางที่ใช้ในโปรแกรมด้านล่างมีดังนี้
-
ใส่ค่าตัวเลข num
-
ตั้งค่า max_size เป็น 9 เนื่องจากจะมีตัวเลขอย่างน้อย 9 ตัวเสมอซึ่งจะมีการเรียงสับเปลี่ยนเท่ากับหรือมากกว่าตัวมันเอง
-
เริ่มวนซ้ำจาก 0 ถึง max_size
-
ภายในลูป ให้สร้างตัวแปรประเภทรายการและตรวจสอบว่า i น้อยกว่าหรือเท่ากับ num IF ใช่ จากนั้นให้แทรก i ลงในรายการและเพิ่มจำนวนขึ้น 1
-
สำรวจรายการตั้งแต่ต้นจนจบและเริ่มวนซ้ำจากองค์ประกอบแรกจนถึง 9
-
ตรวจสอบว่า temp <=num แล้วกด temp ที่หน้ารายการและเพิ่มจำนวนขึ้น 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