Per lo OP
questo non è un attacco personale a te, tutt'altro
sono solo considerazioni teoriche, alla fine ti metterò qualche “idea”, non oso chiamarle consigli
In generale:
Sono d'accordo che lo OP ha bisogno di sapere cosa ha sbagliato nello specifico
ma se non esplicita il suo algoritmo non saprò mai se uno specifico errore è “nel programma" o “nell'algoritmo”
cominciamo con la terza riga, dichiarazione di variabili
int n=0; x
qui dichiara senza inizializzarla una variabile che ha lo stesso nome di un argomento
sono due errori in una riga
ma a guardare bene bene non è nemmeno vero, è proprio sbagliata la scrittura…
a me il suo codice non compila nemmeno, quindi come fa ad avere risultati erratici?
o meglio: come fa ad avere “risultati qualunque essi siano”?
passato questo andiamo a vedere gli altri errori e discutiamo dell'algoritmo
quanto poi a volerlo fare “senza” l'uso di puntatori…
non ho la minima idea di come si possa soddisfare la prescrizione di “riportare” due valori con “una” sola funzione senza l'uso di puntatori
se anche la avessi non la userei, comunque: il principio base di C e UNIX (sono stati sviluppati assieme, nello stesso periodo, uno per l'altro e dallo stesso gruppo) è di fare una cosa per volta e farla bene, restituire “due” valori è contrario al C
per tornare a bomba:
programmi si scrivono dopo aver definito l'algoritmo
io ho tentato di ricostruire il tuo, che non hai esplicitato
1) in un ciclo conti le cifre
2) crei un array (in realtà un VLA) per contenerle
3) In un ciclo lo riempi (a rovescio) col metodo dei resti
4) con un ciclo scorri ogni cifra contenuta nel VLA
4a) in un ciclo innestato lo confronti con ogni altra
è lungo e macchinoso, e contiene un errore, non di programma, ma di metodo
se togli quell'errore comunque dovrebbe andare, perché il principio non è sbagliato, è solo lungo
di più… potrei anche dire, ma non so se ti aiuterebbe
invece io penserei laterale:
a me viene in mente che l'array non serve, posso confrontare le cifre mano a mano che le trovo