Ho creato un algoritmo che dovrebbe generare tutte le possibili permutazioni , o meglio genera la permutazione relativa a un dato intero (poi dal codice vedrete che non si tratta di intero ma per lavorare in range più ampi mi appoggio ai BigInteger) passatogli come parametro.
Il problema è che non vengono veramente generate tutte le possibili permutazioni , c'è qualcosa che non va a dovere ma non capisco cosa..innanzitutto vi posto il codice del relativo metodo:
Ma avviandolo , ad esempio così:codice:public static String getPermutazione (char [] caratteri , BigInteger bi) { int sistema = caratteri.length; BigInteger bs = new BigInteger (sistema + ""); int potenza = 0; sb = new StringBuilder (); int resto; BigInteger temp = bi; while ((temp = bi.divide (bs.pow (potenza))).compareTo (BigInteger.ZERO) > 0) { resto = temp.mod (bs).intValue (); sb.append (caratteri [resto]); potenza++; } return sb.reverse ().toString (); }
Senza aspettare neanche troppo tempo noto che mancano delle permutazioni:codice:char [] c = "0123456789".toCharArray (); BigInteger bic = BigInteger.ZERO; while (true) { System.out.println (getPermutazione (c , bic)); bic = bic.add (BigInteger.ONE); Thread.sleep (100); }
manca 0 , manca tutta la serie 00 01 .. 09 , manca 000 001 ... 099
insomma mancano quelli in cui il primo carattere della permutazione sia il primo carattere dell'array passato come parametro al metodo..
Ora chiedo a voi , mi aiutate a capire dove sta l'errore?O meglio , penso di sapere dove sta l'errore ma come lo risolvo?
![]()

Rispondi quotando