มีสถานีรถไฟกลางจำนวน n แห่งระหว่างจุด X และ Y นับจำนวนวิธีต่างๆ ที่รถไฟสามารถจัดให้จอดที่สถานีต่างๆ ได้ เพื่อไม่ให้มีสถานีสองแห่งอยู่ติดกัน ดังนั้นในบทความนี้ เราจะอธิบายทุกแนวทางที่เป็นไปได้เพื่อค้นหาจำนวนสถานีที่หยุดรถ เมื่อพิจารณาจากปัญหาแล้ว เราจะพบว่าต้องหาชุดค่าผสมที่สามารถหยุดรถไฟได้ตามจำนวนสถานี
แนวทางการแก้ปัญหา
มาดูตัวอย่างกันว่ามีสถานีกลางแปดแห่งและเราต้องหาวิธีที่จะหยุดรถไฟที่สถานีกลางสามสถานี
n = 8, s = 3
เรามี (n - s) คือ เหลืออีกห้าสถานีที่รถไฟไม่สามารถหยุดได้
เรามีห้าสถานี A, B, C, D, E ซึ่งรถไฟไม่สามารถหยุดได้ ตอนนี้ เรามีจุดจุดหกจุดเพื่อจัดสถานีหยุดสามแห่ง เพื่อไม่ให้มีสถานีสองแห่งติดต่อกัน ดังนั้น จำนวนวิธีคือ −
6c3= [fact(6) - fact(3)] / fact(3) = 6 * 5 * 4 / 3 * 2 * 1 = 20
มี 20 วิธีในการจัดเรียงสถานีหยุดสามแห่งจากจุด X และ Y ดังนั้นนี่คือตัวอย่าง −
Input : n = 15 s = 4 Output : 495 Input : n = 8 s = 3 Output : 20
ตัวอย่าง
#include<bits/stdc++.h> using namespace std; int main(){ int n = 8, s = 3; int flag1 = 1, flag2 = 1, temp = s, ans; // selecting 's' positions out of 'n-s+1' int x = n - s + 1; while (x != (n - 2 * s + 1)) { flag1 = flag1 * x; x--; } while (temp != 1) { flag2 = flag2 * temp; temp--; } ans = flag1 / flag2; if ((n - s + 1) >= s) cout << "Number of ways : " << ans; else cout << "not possible to find"; return 0; }
ผลลัพธ์
Number of ways : 20
คำอธิบายของโค้ดด้านบน
เพื่อให้เข้าใจโค้ด C++ นี้ เราสามารถแบ่งโซลูชันออกเป็นขั้นตอนได้
-
การนับจำนวนสถานีใน n และสถานีหยุดใน s เป็นอินพุต
-
การเริ่มต้นตัวแปร flag1 และ flag 2 ด้วย 1 และเก็บค่าของ s ไว้ในตัวแปร temp
-
กำลังคำนวณ flag1 ซึ่งเป็นตัวเศษ [fact(n) - fact(r)].
-
กำลังคำนวณ flag2 ซึ่งเป็นตัวส่วน [fact(r)]
-
ผลการพิมพ์
บทสรุป
ในบทความนี้ เราแก้ปัญหาเพื่อค้นหาจำนวนวิธีที่รถไฟสามารถหยุดบนสถานีกลางได้ โดยจะไม่มีสองสถานีต่อเนื่องกัน นอกจากนี้เรายังได้เรียนรู้โปรแกรม C ++ สำหรับปัญหานี้และแนวทางที่สมบูรณ์ซึ่งเราแก้ไขปัญหานี้ เราสามารถเขียนโปรแกรมเดียวกันในภาษาอื่นๆ เช่น C, java, python และภาษาอื่นๆ