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

นับจำนวนธรรมชาติที่มีการเรียงสับเปลี่ยนทั้งหมดมากกว่าจำนวนนั้นใน C++


เราได้รับตัวเลขธรรมชาติ สมมุติว่า 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