พื้นหลัง
ลำดับ 1-2-3-Tribonacci
ลองจินตนาการถึงวินาทีที่คุณสามารถสร้างลำดับฟีโบนักชีโดยแทนที่สูตรการทำซ้ำมาตรฐานด้วยสิ่งต่อไปนี้:
โดยพื้นฐานแล้วแทนที่จะรวมสองครั้งสุดท้ายเพื่อให้ได้คะแนนถัดไปคุณจะรวมสามครั้งสุดท้าย นี่เป็นพื้นฐานสำหรับลำดับ 1-2-3-Tribonacci
เกณฑ์ของบราวน์
สถานะเกณฑ์ของ Brown ที่คุณอาจแทนค่าจำนวนเต็มใด ๆ เป็นผลรวมของสมาชิกของลำดับที่จัดทำโดย:
สำหรับทั้งหมดที่
n
มากกว่า 1
สิ่งนี้มีความหมายสำหรับความท้าทาย
คุณอาจอธิบายจำนวนเต็มบวกใด ๆ เป็นผลรวมของสมาชิกของลำดับ 1-2-3-Tribonacci ที่เกิดขึ้นตามเงื่อนไขเริ่มต้นต่อไปนี้:
สิ่งนี้เรียกว่าสำหรับทุกค่าในลำดับนี้อัตราส่วนระหว่างเทอมจะไม่เกิน 2 (อัตราส่วนโดยเฉลี่ยอยู่ที่ประมาณ 1.839)
วิธีเขียนในระบบการแสดงตัวเลข
สมมติว่าคุณใช้การแทนค่าแบบเอนด์เอนเดียน จัดเรียงสมาชิกตามลำดับดังนี้:
1 2 3 6 11 20 37 68
จากนั้นคุณจะใช้หมายเลขของคุณที่จะเป็นตัวแทน (สำหรับการทดสอบของเราขอบอกว่ามันเป็น63
) และหาค่าที่กำหนด 1-2-3-Tribonacci ซึ่งรวมไป 63 (ใช้ค่าที่ใหญ่ที่สุดครั้งแรก!) ถ้าจำนวนนั้นเป็นส่วนหนึ่งของผลรวมให้ใส่ 1 อันใต้ 0 ถ้าไม่
1 2 3 6 11 20 37 68
0 0 0 1 0 1 1 0
คุณสามารถทำสิ่งนี้สำหรับจำนวนเต็มใด ๆ ที่ระบุ - เพียงตรวจสอบว่าคุณใช้ค่าที่ใหญ่ที่สุดด้านล่างใส่ของคุณก่อน!
คำจำกัดความ (สุดท้าย)
เขียนโปรแกรมหรือฟังก์ชั่นที่จะทำสิ่งต่อไปนี้ให้ป้อนจำนวนเต็มบวกn
(เขียนในฐานมาตรฐาน) ระหว่าง 1 และค่าสูงสุดของภาษาของคุณ:
- แปลงค่าเป็นการแสดงตัวเลข 1-2-3-Tribonacci ที่กำหนดไว้
- ใช้การแทนแบบไบนารี่นี้และอ่านราวกับว่ามันเป็นไบนารี่ ซึ่งหมายความว่าตัวเลขยังคงเหมือนเดิม แต่สิ่งที่พวกเขาหมายถึงการเปลี่ยนแปลง
- ใช้เลขฐานสองนี้แล้วแปลงเป็นฐานของหมายเลขเดิม
- เอาท์พุทหรือส่งกลับจำนวนใหม่นี้
อย่างไรก็ตามตราบใดที่เอาต์พุตนั้นถูกต้องคุณไม่จำเป็นต้องทำตามขั้นตอนเหล่านี้ หากคุณพบสูตรบางอย่างที่สั้นกว่า (และเทียบเท่าทางคณิตศาสตร์) อย่างน่าอัศจรรย์อย่าลังเลที่จะใช้มัน
ตัวอย่าง
ให้ฟังก์ชั่นf
เป็นฟังก์ชั่นที่อธิบายโดยคำจำกัดความและให้[]
เป็นตัวแทนของขั้นตอนที่ดำเนินการ (ในฐานะที่เป็น endian น้อยแม้ว่ามันจะไม่สำคัญ) (คุณไม่จำเป็นต้องทำตามกระบวนการนี้นี่เป็นเพียงกระบวนการที่อธิบายไว้):
>>> f(1)
[1]
[1]
[1]
1
>>> f(5)
[5]
[0, 1, 1]
[6]
6
>>> f(63)
[63]
[0, 0, 0, 1, 0, 1, 1]
[104]
104