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

วันเกิด Paradox ใน C++


วันเกิดที่ผิดธรรมดาเป็นปัญหาที่มีชื่อเสียงมากในส่วนของความน่าจะเป็น คำชี้แจงปัญหาของปัญหานี้ระบุว่า

มีหลายคนในงานเลี้ยงวันเกิด บางคนมีการชนกันในวันเกิดเดียวกัน เราต้องหาจำนวนโดยประมาณ ของคนในงานวันเกิดที่มีวันเกิดวันเดียวกัน

ในความน่าจะเป็นที่เรารู้ว่าโอกาสที่จะก้าวไปข้างหน้าเท่ากับ 1/2 เหมือนกับว่าเรามีเหรียญอยู่บ้าง โอกาสที่จะได้รับ 10 หัวคือ 1/100 หรือ 0.001

เรามาทำความเข้าใจแนวคิดกันเถอะ

โอกาสที่คนสองคนจะมีวันเกิดต่างกันคือ

364/365 ซึ่งเท่ากับ 1-1/365 ในปีที่ไม่ใช่ปีอธิกสุรทิน

ดังนั้นเราสามารถพูดได้ว่าคนแรกที่มีโอกาสเกิดวันเกิดอย่างเฉพาะเจาะจงคือ '1' และสำหรับคนอื่น ๆ จะแตกต่างกันซึ่งก็คือ

P(แตกต่าง)=1×(1-1/365)× (1-2/365)× (1-3/365) × (1-4/365).......

ดังนั้น P(same)=1- P(ต่าง)

ตัวอย่างเช่น

จำนวนผู้ที่มีวันเกิดวันเดียวกันซึ่งความน่าจะเป็น 0.70

N=√2×365×log(1-1/p)

N=√2×365×log(1-1/0.70)=30

ดังนั้นจำนวนโดยประมาณทั้งหมด ของคนที่เกิดวันเดียวกันคือ 30

ตัวอย่าง

#include<bits/stdc++.h>
using namespace std;
int findPeople(double p){
   return ceil(sqrt(2*365*log(1/(1-p))));
}
int main(){
   printf("%d",findPeople(0.70));
}

ผลลัพธ์

30