สิ่งนี้ได้รับแรงบันดาลใจจากปัญหาที่ 13 - ไบนารีที่ไม่ซ้ำของการแข่งขันล่าสุดของHP CodeWars
ลองใส่ตัวเลขทศนิยมแบบสุ่มพูด
727429805944311
และดูที่การเป็นตัวแทนไบนารี:
10100101011001011111110011001011101010110111110111
ตอนนี้แยกการเป็นเลขฐานสองนั้นออกเป็นอนุกรมที่ตัวเลข0
และ1
ทางเลือก
1010 010101 10 0101 1 1 1 1 1 10 01 10 0101 1 1010101 101 1 1 1 101 1 1
และแปลงแต่ละลำดับกลับเป็นทศนิยม
10 21 2 5 1 1 1 1 1 2 1 2 5 1 85 5 1 1 1 5 1 1
งาน
รับจำนวนเต็มบวกเดียวเป็นอินพุตและเอาต์พุตลำดับของจำนวนเต็มบวกที่ได้จากกระบวนการข้างต้น
รายละเอียด
- อินพุตและเอาต์พุตต้องเป็นทศนิยมหรือไม่เป็นศูนย์
- ตัวเลขในเอาต์พุตจะต้องแยกออกในแบบที่สมเหตุสมผลและอ่านง่ายและจะต้องเป็นทศนิยมหรือไม่เป็นเอกพจน์ ไม่มีข้อ จำกัด ในพื้นที่สีขาว รูปแบบการส่งออกที่ถูกต้อง:
[1,2,3]
,1 2 3
,1\n2\n3
ที่\n
มีการขึ้นบรรทัดใหม่ที่แท้จริง ฯลฯ
กรณีทดสอบ
Input | Output
0 | 0
1 | 1
2 | 2
3 | 1 1
4 | 2 0
5 | 5
6 | 1 2
7 | 1 1 1
8 | 2 0 0
9 | 2 1
10 | 10
50 | 1 2 2
100 | 1 2 2 0
1000 | 1 1 1 1 10 0 0
10000 | 2 1 1 2 0 2 0 0 0
12914 | 1 2 2 1 1 2 2
371017 | 5 42 10 2 1
หมายเหตุเพิ่มเติม: ตัวเลขทั้งหมดในการส่งออกที่ควรจะเป็นในรูปแบบหรือ(2^k-1)/3
2*(2^k-1)/3
นั่นคือ0 1 2 5 10 21, 42, 85, 170, ...
ซึ่งคือA000975ใน OEIS
|tac
จะยังคงอยู่ในคำตอบของฉัน :)