Io e il mio amico stavamo lavorando in un laboratorio nella nostra classe AP Computer Science e abbiamo deciso di programmare il golf uno dei problemi dato che dopo la fine avevamo ancora metà della lezione gratuita. Ecco la domanda:
Dato un numero n, n è divisibile per ciascuna delle sue cifre?
Ad esempio, 128 supererà questo test: è divisibile per 1,2 e 8. Qualsiasi numero con zero esclude automaticamente il numero. Anche se puoi usare altre lingue e pubblicare soluzioni con loro, se lo desideri, siamo più interessati a vedere come le persone compatte possono creare il programma in Java, poiché questa è la lingua che usiamo nella classe. Finora, abbiamo entrambi 51. Ecco il mio codice attuale:
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.
Requisiti
La firma del metodo può essere quella che vuoi. Basta contare il corpo della funzione. Assicurati, tuttavia, che il metodo restituisca un valore booleano e passi solo un parametro numerico (non una stringa).
Il codice deve essere in grado di trasmettere tutti questi casi (al fine di rimanere fedeli alle direzioni della domanda iniziale, solo contano i valori veri e falsi booleani se i supporti linguistici booleani. Se e solo se la lingua non ha variabili booleane voi può rappresentare false con 0 e true con qualsiasi numero intero diverso da zero (preferibilmente 1 o -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
Inoltre, non abbiamo contato gli spazi bianchi, quindi sentiti libero di fare lo stesso, a meno che lo spazio bianco sia essenziale per il funzionamento del programma (quindi le nuove righe in Java non contano, ma un singolo spazio tra inte x=1conta.) Buona fortuna !
0cifre che è un multiplo di ciascuno di essi), immagino che la maggior parte delle risposte si allungherebbe in modo poco interessante per includere un controllo per esso. Quindi mi piace il problema posto meglio dal titolo (divisibile per le sue cifre, piuttosto che essere un multiplo delle sue cifre, che esclude 0).
trueefalseo sono truthy / falsy valori OK pure? 3. Iljavatag non si applica qui, poiché la sfida in sé non è correlata a Java.