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

เพิ่มโอกาสได้ประเภทข้อมูลหนึ่งจาก N ภาชนะใน C++

ความน่าจะเป็น P = (ผลลัพธ์ที่ต้องการ) / (ผลลัพธ์ทั้งหมด)

กำหนดให้มี N ภาชนะ และมีจำนวน N ชุดของตัวเลข 2 ประเภท คือ X และ Y งานคือแบ่งตัวเลข X ไปใน N ภาชนะ ให้โอกาสในการจับได้ X สูงสุด

เพื่อให้ P สูงสุด สามารถทำได้โดย:

  • เพิ่มตัวเศษ (ผลลัพธ์ที่ต้องการ) หรือ
  • ลดตัวส่วน (ผลลัพธ์ทั้งหมด)

วิธีที่ดีที่สุด: ให้ N-1 ภาชนะ มีแค่ X อย่างละ 1 ตัว (รวม N-1 ตัว) และภาชนะสุดท้ายมี 1 Y + N X (รวม N+1 ตัว)

ดังนั้น:

P(X จาก N-1 ภาชนะแรก) = 1
P(X จากภาชนะสุดท้าย) = 1/(N+1)

Pmax = 1 × (N-1)/N + (1/(N+1)) × 1/N
     = (N-1)/N + 1/(N(N+1))
     = (N² - 1 + 1) / (N(N+1))
     = N/(N+1)

ตัวอย่าง

N = 1

Output: 0.5

มี 1 ภาชนะ 1 X และ 1 Y → โอกาส = 1/2 = 0.5

N = 3

Output: 0.75

3 ภาชนะ: 2 ภาชนะแรกมี X อย่างละ 1, ภาชนะสุดท้ายมี 3 Y + 3 X = 6 ตัว → P = 3/4 = 0.75

แนวทางแก้ปัญหา

  1. รับค่า N (จำนวนภาชนะ)
  2. คำนวณ maxP = N / (N + 1) (ใช้ floating point division)
  3. แสดงผล

ตัวอย่างโค้ด

#include <iostream>
#include <iomanip>
using namespace std;

int main() {
    int N = 3;
    double maxP = static_cast<double>(N) / (N + 1);
    cout << fixed << setprecision(4);
    cout << "Maximum Probability for N = " << N << " is: " << maxP << endl;
    return 0;
}

ผลลัพธ์

Maximum Probability for N = 3 is: 0.7500

ตารางค่าตัวอย่าง

Nสูตร N/(N+1)ค่าทศนิยม
11/20.5000
22/30.6667
33/40.7500
44/50.8000
55/60.8333
1010/110.9091
100100/1010.9901

เมื่อ N → ∞ ความน่าจะเป็นจะเข้าใกล้ 1