Ciao,
il problema nel tuo algoritmo è in questo ciclo for:
tony097 ha scritto:
for (int i=0; i<N; i++) {
if (A[i]%2==0) {
P=new int [np];
for (int j=0; j<np; j++) {
P[j]=A[i];
}
} else {
D=new int [nd];
for (int j=0; j<nd; j++) {
D[j]=A[i];
}
}
}
Quando trovi un numero pari od un numero dispari, riempi l'intero array (dei pari o dei dispari) con quel numero, di conseguenza stampa solo l'ultimo pari e l'ultimo dispari che trova
Una soluzione potrebbe essere
int *P = new int[np];
int *D = new int[nd];
int index_p = 0;
int index_d = 0;
for(int i = 0; i < N; i++){
if(A[i] % 2 == 0){
P[index_p] = A[i];
index_p++;
}else{
D[index_d] = A[i];
index_d++;
}
}
Come detto già da oregon, P e D vanno inizializzati fuori il ciclo altrimento lo farà sempre, perdendo i valori salvati in precedenza.
Ho utilizzato due indici supplementari index_p e index_d per mantenere la posizione dell'ultimo elemento pari o dispari che ho inserito nel rispettivo array, questo è il metodo più semplice per inserire in modo coerente e nella giusta successione gli elementi (evitando di creare buchi o sovrascritture di elementi già inseriti).