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

ค้นหาจำนวนวิธีที่จะไปจากจุดหนึ่งไปยังอีกจุดหนึ่งในตารางโดยใช้ C++


ในบทความนี้ เรามีคำถามที่ต้องค้นหาจำนวนวิธีทั้งหมดจากจุด A ถึง B โดยที่ A และ B เป็นจุดตายตัว กล่าวคือ A เป็นจุดซ้ายบนของตาราง และ B คือจุดล่างสุด จุดขวาในตารางเช่น −

Input : N = 5
Output : 252

Input : N = 4
Output : 70

Input : N = 3
Output : 20

ในปัญหาที่กำหนด เราสามารถกำหนดคำตอบให้เป็นทางการได้ด้วยการสังเกตง่ายๆ และได้ผลลัพธ์

แนวทางในการหาทางออก

ในวิธีนี้ เราสร้างสูตรสำหรับปัญหาที่กำหนดโดยสังเกตว่าสำหรับการเดินทางผ่านตารางจาก A ไปยัง B เราจำเป็นต้องเดินทาง n ครั้งในทิศทางที่ถูกต้องและ n ครั้งในทิศทางลง ซึ่งหมายความว่าเราจำเป็นต้อง หาความเป็นไปได้ทั้งหมดของการรวมกันของเส้นทางเหล่านี้ เพื่อให้เราได้สูตรของการรวมกันของ (n+n) และ n

ตัวอย่าง

#include<bits/stdc++.h>

using namespace std;
int fact(int n){ // factorial function 
   if(n <= 1)
      return 1;
   return n * fact(n-1);
}
int main() {
   int n = 5; // given n
   int answer = 0; // our answer
   answer = fact(n+n); // finding factorial of 2*n
   answer = answer / (fact(n) * fact(n)); // (2*n)! / (n! + n!)
   cout << answer << "\n";
}

ผลลัพธ์

252

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

ในรหัสนี้ เราคำนวณสูตรของการรวมกันของ 2*n ถึง n เนื่องจากเรารู้ว่าสำหรับการเดินทางจากจุด A ไปยัง B เราจะกำหนดให้มีการดำเนินการ 2*n ในสองทิศทาง นั่นคือ n การดำเนินการในทิศทางเดียว และการดำเนินการ n ในอีกรูปแบบหนึ่ง เราจึงพบการรวมกันที่เป็นไปได้ทั้งหมดของการดำเนินการเหล่านี้ นั่นคือ (2*n)!/ (n! + n!) ความซับซ้อนของเวลาโดยรวมของโปรแกรมที่กำหนดคือ O(1) ซึ่งหมายความว่าความซับซ้อนของเราไม่ได้ขึ้นอยู่กับ n ที่กำหนด

บทสรุป

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