Teman saya dan saya sedang mengerjakan laboratorium di kelas Ilmu Komputer AP kami dan memutuskan untuk membuat kode golf satu masalah karena kami masih memiliki setengah kelas gratis setelah kami selesai. Ini pertanyaannya:
Diberi angka n, apakah n dapat dibagi dengan masing-masing digitnya?
Sebagai contoh, 128 akan lulus tes ini - itu dapat dibagi dengan 1,2, dan 8. Setiap angka dengan nol secara otomatis mendiskualifikasi angka tersebut. Meskipun Anda dapat menggunakan bahasa lain dan memposting solusi jika Anda suka, kami sangat tertarik melihat bagaimana orang yang kompak dapat membuat program di Jawa, karena itu adalah bahasa yang kami gunakan di kelas. Sejauh ini, kami berdua memiliki 51. Ini kode saya saat ini:
public boolean dividesSelf(int n){for(int p=n;n%10>0;)n/=p%(n%10)>0?.1:10;return n<1;}
// 51 characters
// Breakdown:
// for(int p=n; Saves one semicolon to put declaration into for loop
// n%10>0;) Basic check-for-zero
// n/= Pretty simple, discarding one number off of n at a time
// p%(n%10)>0? If p (the given value) is not divisible by n%10 (the current digit)...
// .1:10; Divide by .1 (multiply by 10) so it fails the check next iteration. If it is divisible, divide by 10 to truncate the last digit
// return n<1 If the number was fully divisible, every digit would be truncated, and n would be 0. Else, there would still be non-zero digits.
Persyaratan
Tanda tangan metode dapat menjadi apa pun yang Anda inginkan. Hitung saja fungsi tubuhnya. Namun, pastikan bahwa metode mengembalikan nilai boolean dan hanya meneruskan dalam satu parameter numerik (bukan string).
Kode harus dapat melewati semua kasus ini (agar tetap benar dengan arah pertanyaan asli, hanya nilai boolean true dan false yang dihitung jika bahasa mendukung booleans. Jika dan hanya jika bahasa Anda tidak memiliki variabel boolean Anda dapat mewakili false dengan 0 dan true dengan sembarang bilangan nol (lebih disukai 1 atau -1):
128 -> true
12 -> true
120 -> false
122 -> true
13 -> false
32 -> false
22 -> true
42 -> false
212 -> true
213 -> false
162 -> true
204 -> false
Juga, kami tidak menghitung spasi putih, jadi jangan ragu untuk melakukan hal yang sama, kecuali spasi putih sangat penting untuk kerja program (jadi baris baru di Jawa tidak masuk hitungan, tetapi satu ruang antara int
dan x=1
tidak dihitung.) Semoga beruntung !
0
digit yang merupakan kelipatan dari masing-masing), saya membayangkan sebagian besar jawaban hanya akan lebih lama dengan cara yang tidak menarik untuk menyertakan cek untuk itu. Jadi saya suka masalah yang ditimbulkan oleh judul lebih baik (dapat dibagi dengan digit-digitnya, daripada kelipatan digitnya, yang tidak termasuk 0).
true
danfalse
atau apakah nilai kebenaran / kepalsuan juga baik? 3.java
Tag tidak benar-benar berlaku di sini, karena tantangan itu sendiri tidak terkait dengan Java.