จำนวน Bell ( OEIS A000110 ) คือจำนวนของวิธีการแบ่งพาร์ติชันชุดของ n ที่มีป้ายกำกับ (ที่แตกต่างกัน) องค์ประกอบ หมายเลขเบลล์ที่ 0 ถูกกำหนดเป็น 1
ลองดูตัวอย่าง (ฉันใช้วงเล็บเหลี่ยมเพื่อแสดงเซตย่อยและวงเล็บปีกกาสำหรับพาร์ติชัน):
1: {1}
2: {[1,2]}, {[1],[2]}
3: {[1,2,3]}, {[1,2],[3]}, {[1,3],[2]}, {[2,3],[1]}, {[1],[2],[3]}
มีหลายวิธีในการคำนวณหมายเลขเบลล์และคุณมีอิสระที่จะใช้หมายเลขใดก็ได้ จะอธิบายวิธีหนึ่งที่นี่:
วิธีที่ง่ายที่สุดในการคำนวณตัวเลขเบลล์คือการใช้รูปสามเหลี่ยมจำนวนที่มีลักษณะคล้ายสามเหลี่ยม Pascal สำหรับค่าสัมประสิทธิ์ทวินาม หมายเลขเบลล์จะปรากฏบนขอบของสามเหลี่ยม เริ่มต้นด้วย 1 แต่ละแถวใหม่ในรูปสามเหลี่ยมถูกสร้างขึ้นโดยนำรายการสุดท้ายในแถวก่อนหน้าเป็นรายการแรกจากนั้นตั้งค่ารายการใหม่แต่ละรายการเป็นเพื่อนบ้านด้านซ้ายพร้อมกับเพื่อนบ้านด้านซ้ายบน:
1
1 2
2 3 5
5 7 10 15
15 20 27 37 52
คุณสามารถใช้การจัดทำดัชนี 0 หรือการจัดทำดัชนี 1 รายการ หากคุณใช้การจัดทำดัชนี 0 อินพุต3
ควรส่งออก5
แต่ควรส่งออก2
หากคุณใช้การจัดทำดัชนี 1 รายการ
โปรแกรมของคุณจะต้องทำงานได้จนถึงเลขที่ 15 เบลล์เอาท์พุ1382958545
ท ในทางทฤษฎีแล้วโปรแกรมของคุณควรสามารถจัดการกับตัวเลขที่มีขนาดใหญ่ขึ้น
แก้ไข: คุณไม่จำเป็นต้องจัดการอินพุต 0 (สำหรับดัชนี 0) หรือ 1 (สำหรับดัชนี 1) เพราะไม่ได้คำนวณโดยวิธีสามเหลี่ยม
กรณีทดสอบ (สมมติว่ามีการจัดทำดัชนี 0):
0 -> 1 (OPTIONAL)
1 -> 1
2 -> 2
3 -> 5
4 -> 15
5 -> 52
6 -> 203
7 -> 877
8 -> 4140
9 -> 21147
10 -> 115975
11 -> 678570
12 -> 4213597
13 -> 27644437
14 -> 190899322
15 -> 1382958545
คำตอบที่ใช้วิธีการในตัว (เช่น BellB [n] ในภาษา Wolfram) ที่สร้างหมายเลขเบลโดยตรงจะไม่สามารถแข่งขันได้
รหัสที่สั้นที่สุด (เป็นไบต์) ชนะ
3
2
ถ้าอย่างนั้นอินพุตจะ1
ให้อะไรกับการจัดทำดัชนี 1 รายการ
3
เอาต์พุตควร5
เป็น ouput15
ใช่ไหม และด้วยการจัดทำดัชนี 1 รายการมันจะแสดงผล5