โจทย์ทั้งหมด
ง่าย 0 ข้อที่แก้แล้ว อัตราผ่าน 0%

ลำดับคอลลาทซ์ (Collatz Sequence)

ทำตามกฎหารสองหรือคูณสามบวกหนึ่งจนกว่าจะถึง 1

เริ่มต้นด้วย n หาก n เป็นเลขคู่ ให้นำ n หารด้วย 2 หาก n เป็นเลขคี่ ให้นำ n คูณ 3 แล้วบวก 1 ทำซ้ำขั้นตอนนี้ไปเรื่อย ๆ จนกว่าค่าจะเป็น 1 ให้รวมทั้งค่าตั้งต้นและ 1 สุดท้ายไว้ในคำตอบด้วย

ให้เขียนฟังก์ชัน collatz_sequence(n)

อินพุต

n: จำนวนเต็มบวกที่ใช้เริ่มต้น

เอาต์พุต

คืนค่าลำดับทั้งหมดตามลำดับที่เกิดขึ้น

เงื่อนไข

1 ≤ n ≤ 10,000 อินพุตในช่วงนี้จะถึง 1 ตามกฎนี้เสมอ และค่าทุกตัวในลำดับจะอยู่ในช่วงของ signed 64-bit integer

ตัวอย่าง

ตัวอย่างที่ 1
อินพุต:
n = 6

ผลลัพธ์ที่คาดหวัง:
expected = [6, 3, 10, 5, 16, 8, 4, 2, 1]
อินพุต:
long long n = 6;

ผลลัพธ์ที่คาดหวัง:
std::vector<long long> expected = {6, 3, 10, 5, 16, 8, 4, 2, 1};
อินพุต:
long n = 6;

ผลลัพธ์ที่คาดหวัง:
long[] expected = new long[] {6, 3, 10, 5, 16, 8, 4, 2, 1};

คำอธิบาย

6 เป็นเลขคู่ จึงกลายเป็น 3 จากนั้น 3 กลายเป็น 10 ทำตามกฎนี้ต่อไปเรื่อย ๆ จนถึง 1

ตัวอย่างที่ 2
อินพุต:
n = 1

ผลลัพธ์ที่คาดหวัง:
expected = [1]
อินพุต:
long long n = 1;

ผลลัพธ์ที่คาดหวัง:
std::vector<long long> expected = {1};
อินพุต:
long n = 1;

ผลลัพธ์ที่คาดหวัง:
long[] expected = new long[] {1};

คำอธิบาย

ค่าตั้งต้นคือ 1 อยู่แล้ว จึงไม่ต้องแปลงค่าใด ๆ

แหล่งอ้างอิง

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

เรียนรู้จากคนอื่น

แนวทางจากชุมชน

ยังไม่มีวิธีทำที่เผยแพร่ ลองแก้โจทย์นี้เพื่อแชร์วิธีแรก