... อ่าขอโทษที่ไม่มีข้าวโพดคั่วที่นี่แค่ POPCNT
เขียนโปรแกรมหรือฟังก์ชั่นที่สั้นที่สุดซึ่งรับจำนวนnแล้วเอาท์พุทจำนวนเต็มทั้งหมดจาก 0 ถึง 2 n - 1 ตามลำดับจากน้อยไปหามากของ 1 บิตในการแทนเลขฐานสองของตัวเลข (popcount) ไม่อนุญาตให้ทำซ้ำ
ลำดับของตัวเลขที่มี popcount เดียวกันนั้นถูกกำหนดตามการนำไปใช้งาน
ตัวอย่างเช่นสำหรับn = 3ผลลัพธ์ทั้งหมดเหล่านี้ถูกต้อง:
0, 1, 2, 4, 3, 5, 6, 7
[0, 4, 1, 2, 5, 3, 6, 7]
0 4 2 1 6 5 3 7
รูปแบบอินพุตและเอาต์พุตถูกกำหนดโดยการนำไปปฏิบัติเพื่ออนุญาตให้ใช้คุณลักษณะภาษาเพื่อเขียนโค้ดเพิ่มเติม มีข้อ จำกัด บางประการเกี่ยวกับผลลัพธ์:
- ตัวเลขจะต้องส่งออกในรูปแบบทศนิยม
เอาต์พุตต้องมีตัวคั่นที่เหมาะสมระหว่างตัวเลข (ตัวคั่นต่อท้ายอนุญาต แต่ไม่นำหน้า)
อาหารเส้น (
\n) แท็บ (\t), พื้นที่,,,.,;,|,-,_,/มีคั่นค่อนข้างเหมาะสม ฉันไม่สนใจช่องว่างเพิ่มเติมสำหรับการพิมพ์ที่สวย แต่ไม่ได้ใช้ตัวอักษรหรือตัวเลขเป็นตัวคั่น- ตัวเลขและตัวคั่นสามารถถูกล้อมรอบด้วย
[ ],{ }หรืออาร์เรย์หรือรายการสัญกรณ์ใด ๆ - อย่าพิมพ์สิ่งอื่นที่ไม่ได้ระบุไว้ข้างต้น
โบนัส
ทวีคูณคะแนนของคุณ0.5หากวิธีการแก้ปัญหาของคุณสามารถสร้างตัวเลขได้ทันที จิตวิญญาณของโบนัสนี้คือถ้าคุณต้องแปลงโซลูชันการพิมพ์ของคุณไปยังเครื่องกำเนิดโดยตรงตัวสร้างจะใช้หน่วยความจำ O (n) เกือบทุกตัวโดยที่ n คือจำนวนบิตตามที่กำหนดไว้ด้านบน (คุณไม่จำเป็นต้องแปลงโซลูชันเป็นตัวสร้าง) โปรดทราบว่าในขณะที่ฉันกำหนดให้ n <= 28 หน่วยความจำที่จำเป็นในการจัดเก็บตัวเลขทั้งหมดยังคงเพิ่มขึ้นแบบทวีคูณและโซลูชันการเรียงลำดับแบบไร้เดียงสาจะทำให้หน่วยความจำอย่างน้อย 4 GB ที่ n = 28
โปรดเพิ่มคำอธิบายง่ายๆว่าโซลูชันของคุณทำงานอย่างไรก่อนรับโบนัสนี้