Aiuto per capire Cabala

Penso di non aver capito cosa chiede l’esercizio perché ho provato a implementare il codice ma mi da tutti output sbagliati tranne il primo, inoltre negli input e output che da negli allegati ci sono delle risposte che sono 0, ma nell’esercizio dice che i numeri devono essere multipli di 3 e nessuno 0.
Poi per esempio la parte in qui dice " il resto di C modulo un certo numero M è più grande possibile" cosa significa ?

Giorgio vuole entrare nella setta Oli-3, in cui si studiano numeri occulti e misteriosi con cui dominare
il mondo. Per essere ammesso, gli viene richiesto di provare il suo valore individuando il numero della
cabala C. Dopo lunghe e difficoltose ricerche, Giorgio è riuscito a scoprire che questo numero:
• ha al più N cifre;
• tutte le sue cifre sono multiple di 3 (ma nessuna è zero);
• non vi sono due cifre adiacenti uguali;
• il resto di C modulo un certo numero M è più grande possibile.

Questo – in parole povere – vuol dire che, sapendo il valore di M, tu devi trovare un numero C che soddisfi tutte le condizioni precedenti e che, tra tutti i numeri C possibili, questo abbia il massimo valore di C mod M. L’operazione mod non è nient’altro che il resto della divisione intera. In C++ si utilizza questa sintassi: x % y (con x e y appropriate variabili).

Il testo del problema non richiede il numero, bensì il massimo resto ottenibile: per questo motivo, se c’è uno zero nel risultato vuol dire che il massimo valore che ha l’operazione C mod M è stato 0.

Se serve una mano nell’implementazione, chiedi pure! Buona giornata :slight_smile:

Potresti darmi un suggerimento su come dovrei implementarlo il codice? Grazie

Il mio suggerimento è usare una tecnica di programmazione detta “backtracking”. Puoi trovare ulteriori informazioni riguardo ad essa sul materiale proposto da AlgoBadge (se hai sbloccato il badge – e se non l’hai fatto, te lo consiglio vivamente).

Cosa fai nella funzione che risolve (dev’essere ricorsiva, ovviamente):

  • Prendi due parametri: il numero di cifre che ha il numero al momento e il risultato (massimo modulo)
  • Nella funzione cerchi di massimizzare il valore del risultato, provando ogni volta ad aggiungere al numero una cifra tra 3, 6 e 9 (facendo attenzione a non avere mai due cifre adiacenti uguali).
  • Ritorni il valore massimo trovato.
  • Attenzione a individuare il caso limite: quando hai un numero di N cifre non puoi più andare avanti

Se ti servono ulteriori chiarimenti, o ti può essere d’aiuto del codice di esempio, puoi chiedere pure!