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

จำนวนจุดสูงสุดหลังจากโยนลูกเต๋า N ครั้งใน C++


ภารกิจคือการคำนวณจำนวนจุดสูงสุดที่คาดหวังได้หลังจากการโยนลูกเต๋า N ครั้งที่มีหน้า M

หน้าแรกของลูกเต๋ามี 1 จุด หน้าที่สองมี 2 จุด เป็นต้น ใบหน้าที่ M ก็มีจำนวนจุด M เช่นเดียวกัน

ความน่าจะเป็นของการปรากฏตัวของแต่ละใบหน้าจะกลายเป็น 1/M

ตอนนี้มาทำความเข้าใจสิ่งที่เราต้องทำโดยใช้ตัวอย่าง -

ป้อนข้อมูล − M=2, N=3

ผลผลิต − 1.875

คำอธิบาย − ลูกเต๋ามี 2 ด้าน ={1, 2}

หากโยนลูกเต๋า 3 ครั้ง พื้นที่สุ่มตัวอย่างจะเป็น =M N =2 3

<ก่อน>{(1, 1, 1), (1, 1, 2), (1, 2, 1), (1, 2, 2,)(2, 1, 1), (2, 1, 2 ), (2, 2, 1), (2, 2, 2,)}จำนวนสูงสุดใน (1, 1, 1) =1 จำนวนสูงสุดใน (1, 1, 2) =2 จำนวนสูงสุดใน (1, 2, 1 ) =2 จำนวนสูงสุดใน (1, 2, 2) =2 จำนวนสูงสุดใน (2, 1, 1) =2 จำนวนสูงสุดใน (2, 1, 2) =2 จำนวนสูงสุดใน (2, 2, 1) =2 จำนวนสูงสุดใน ( 2, 2, 2) =2ความน่าจะเป็นของแต่ละกรณี =1/2 3 =0.125ดังนั้น คาดหวังจำนวนสูงสุด =(1+2+2+2+2+2+2+2) * (0.125) =1.875

ป้อนข้อมูล − M=2, N=2

ผลผลิต − 1.75

แนวทางที่ใช้ในโปรแกรมด้านล่างดังนี้

  • จำนวนกรณีสูงสุดที่สามารถหาตัวเลขได้โดยใช้หมายเลขก่อนหน้าโดยใช้สูตร − i N – (i-1) N .

    ตัวอย่างเช่น ถ้า M=4 และ N=2 จำนวนเคสทั้งหมดซึ่งสูงสุด =4 จะเป็น 4 2 – (4-1) 2 =7.

    ดังนั้นคำตอบสุดท้ายจะใช้สูตรนี้กับทุกองค์ประกอบตั้งแต่ 1 ถึง M −

    (ผม * (ผม N – (i - 1) N )) / M N แล้วนำมารวมกัน

  • ในฟังก์ชัน MaxExpect() ให้กำหนดค่าเริ่มต้นตัวแปร max =0 ของประเภท double เพื่อเก็บผลรวม

  • จากนั้นวนจาก i=M จนถึง i>0

  • ภายในลูปใช้สูตรที่ระบุไว้ข้างต้นและเพิ่มค่าผลลัพธ์ทั้งหมดลงในตัวแปร max ต่อไป

ตัวอย่าง

#include ใช้เนมสเปซ std; double MaxExpect (double M, double N){ double max =0.0, i; สำหรับ (i =M; i; i--) /*สูตรเพื่อค้นหาจำนวนสูงสุดและผลรวมของจำนวนสูงสุด*/ max +=(pow(i / M, N) - pow((i - 1) / M, N )) * ฉัน; คืนค่า max;}int main(){ double M =2, N =3; ศาล < 

ผลลัพธ์

หากเราเรียกใช้โค้ดข้างต้น เราจะได้ผลลัพธ์ดังต่อไปนี้ -

1.875