Kami telah mendefinisikan nomor lipat di sini .
Tapi sekarang kita akan mendefinisikan Nomor Super Lipat. Angka Super Lipat adalah angka yang jika dilipat cukup kali pada akhirnya akan mencapai satu kurang dari kekuatan dua. Metode melipat sedikit berbeda dari pada pertanyaan nomor lipat.
Algoritma lipat berjalan sebagai berikut:
Ambil representasi biner
misalnya 5882
1011011111010
Mencurahkannya menjadi tiga partisi. Paruh pertama, setengah terakhir dan digit tengah (jika memiliki angka ganjil)
101101 1 111010
Jika angka tengah nol, angka ini tidak dapat dilipat
Membalikkan babak kedua dan melapiskan pada babak pertama
010111 101101
Tambahkan digit di tempatnya
111212
- Jika ada 2s dalam hasil angka tidak dapat dilipat kalau tidak angka baru adalah hasil dari algoritma lipat.
Angka adalah nomor Super Lipat jika dapat dilipat ke string yang terus-menerus. (Semua nomor Lipat juga Nomor Super Lipat)
Tugas Anda adalah menulis kode yang menggunakan angka dan menampilkan nilai yang benar jika nomor tersebut adalah nomor Super Lipat dan sebaliknya palsu. Anda akan dinilai berdasarkan ukuran program Anda.
Contohnya
5200
Konversi ke biner:
1010001010000
Dibagi dua:
101000 1 010000
Yang di tengah adalah satu sehingga kami melanjutkan Menumpangkan bagiannya:
000010
101000
Menambahkannya:
101010
Tidak ada dua jadi kami melanjutkan Berpisah menjadi dua:
101 010
Melipat:
010
101
111
Hasilnya adalah 111
(7 dalam desimal) jadi ini adalah Nomor Super Lipat.
Uji Kasus
100 Nomor Super Lipat pertama adalah:
[1, 2, 3, 6, 7, 8, 10, 12, 15, 20, 22, 28, 31, 34, 38, 42, 48, 52, 56, 63, 74, 78, 90, 104, 108, 120, 127, 128, 130, 132, 142, 150, 160, 170, 178, 192, 204, 212, 232, 240, 255, 272, 274, 276, 286, 310, 336, 346, 370, 400, 412, 436, 472, 496, 511, 516, 518, 524, 542, 558, 580, 598, 614, 640, 642, 648, 666, 682, 704, 722, 738, 772, 796, 812, 852, 868, 896, 920, 936, 976, 992, 1023, 1060, 1062, 1068, 1086, 1134, 1188, 1206, 1254, 1312, 1314, 1320, 1338, 1386, 1440, 1458, 1506, 1572, 1596]
3
menyelinap ke dalam kasus uji lagi? Saya tidak bisa melihat bagaimana bisa dilipat, karena terbelah1 1
, segera memberi a2
. Atau apakah Anda mengatakan bahwa melipatnya nol kali juga dihitung?