โจทย์
เริ่มลำดับด้วย 1 และ 2 โดยแต่ละจำนวนถัดไปคือผลรวมของสองจำนวนก่อนหน้า ให้นำเฉพาะจำนวนที่เป็นเลขคู่และไม่เกิน limit มารวมกัน
ให้เขียนฟังก์ชัน even_fibonacci_sum(limit)
อินพุต
limit: ค่ามากที่สุดของจำนวนในลำดับที่สามารถนำมารวมได้
เอาต์พุต
คืนค่าผลรวม หรือ 0 หากไม่มีจำนวนที่เข้าเงื่อนไข
เงื่อนไข
0 ≤ limit ≤ 10¹⁵ ผลลัพธ์อยู่ในช่วงของจำนวนเต็ม signed 64-bit
ตัวอย่าง
อินพุต:
limit = 50
ผลลัพธ์ที่คาดหวัง:
expected = 44
อินพุต:
long long limit = 50;
ผลลัพธ์ที่คาดหวัง:
long long expected = 44;
อินพุต:
long limit = 50;
ผลลัพธ์ที่คาดหวัง:
long expected = 44;
คำอธิบาย
จำนวนที่เป็นเลขคู่คือ 2, 8 และ 34 ผลรวมคือ 44
อินพุต:
limit = 1
ผลลัพธ์ที่คาดหวัง:
expected = 0
อินพุต:
long long limit = 1;
ผลลัพธ์ที่คาดหวัง:
long long expected = 0;
อินพุต:
long limit = 1;
ผลลัพธ์ที่คาดหวัง:
long expected = 0;
คำอธิบาย
จำนวนที่เป็นเลขคู่ตัวแรกคือ 2 ซึ่งมากกว่าค่าขีดจำกัด
แนวทางการแก้
ลองทำเองก่อน แล้วค่อยเปิดคำใบ้ทีละข้อ
คำใบ้ 1
ต้องใช้เฉพาะ Fibonacci ที่เป็นเลขคู่ ไม่ต้องสร้างทั้งลำดับ
คำใบ้ 2
สร้างไปจนกว่าพจน์ถัดไปจะเกินขอบเขต แล้วบวกเฉพาะพจน์ที่ใช้ได้
คำใบ้ 3
ระวังขอบเขตตอนค่าจำกัดพอดีกับพจน์ Fibonacci
ความซับซ้อนที่คาดหวัง
เวลา O(log limit), หน่วยความจำเพิ่ม O(1)
แหล่งอ้างอิง
โจทย์นี้ปรับให้เหมาะกับ CodeUtility กรุณาทำตามคำชี้แจงและข้อจำกัดด้านบน