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

C++ การเรียงสับเปลี่ยนของ n สิ่ง ที่ถ่ายทีละ r กับ k Things ร่วมกัน


ให้ n, r, k ตอนนี้เราต้องค้นหาว่าเราสามารถเลือกสิ่งของ r จาก n ได้อย่างไร เพื่อให้ k เฉพาะเกิดขึ้นพร้อมกัน เป็นต้น

Input : n = 8, r = 5, k = 2

Output : 960


Input : n = 6, r = 2, k = 2

Output : 2

เราต้องการความรู้เล็กน้อยสำหรับปัญหานี้เพราะปัญหานี้ขอให้เราค้นหาการเรียงสับเปลี่ยนของ n และ r จนทำให้ k มารวมกัน

แนวทางในการหาแนวทางแก้ไข

เราจำเป็นต้องกำหนดสูตรของเราสำหรับคำถามนี้ และนั่นจะให้คำตอบแก่เรา

ตัวอย่าง

#include <bits/stdc++.h>
using namespace std;
int fact(int n){ // function to calculate factorial of a number
    if(n <= 1)
        return 1;
    return n * fact(n-1);
}
int npr(int n, int r){ // finding permutation
    int pnr = fact(n) / fact(n - r);
    return pnr;
}
int countPermutations(int n, int r, int k){ // the formula that we came up with
    return fact(k) * (r - k + 1) * npr(n - k, r - k);
}
int main(){
    int n = 8;
    int r = 5;
    int k = 2;
    cout << countPermutations(n, r, k);
    return 0;
}

ผลลัพธ์

960

คำอธิบายของโค้ดด้านบน

ในแนวทางข้างต้น เราพยายามคิดค้นสูตรในการคำนวณคำตอบสำหรับปัญหานี้ สูตรที่เราคิดค้นคือ (k!) * (r - k + 1) * P(n-k, r-k) ( P(x, y) คือจำนวนการเรียงสับเปลี่ยนของการเลือก y จาก x) ดังนั้นเราจึงนำสูตรของเรามาคำนวณหาคำตอบ

บทสรุป

ในบทช่วยสอนนี้ เราแก้ปัญหาเพื่อค้นหาการเรียงสับเปลี่ยนของ n ตัวที่นำ r ครั้งละ r ด้วย k ตัวเข้าด้วยกัน นอกจากนี้เรายังได้เรียนรู้โปรแกรม C++ สำหรับปัญหานี้และแนวทางที่สมบูรณ์ ( Normal) ซึ่งเราแก้ปัญหานี้ได้

เราสามารถเขียนโปรแกรมเดียวกันในภาษาอื่นๆ เช่น C, java, python และภาษาอื่นๆ เราหวังว่าคุณจะพบว่าบทช่วยสอนนี้มีประโยชน์