Premetto che non sono molto esperto;
secondo me il problema è semplice: con
if( a[i] == a[j]) {
flag=1;
}
confronti ognin volta l stesso valore con se stesso (se ad esempio i=2, quando nel ciclo j diventerà 2 avrai if( a[2] == a[2]) {flag=1;}, il risultato sarà per forza flag=1), flag per questo è sempre 1 il valore non viene mai passato a b[].
Inoltre devi specificare all'inizio del ciclo iniziale che flag=0, oppure appena diventerà 1 lo resterà per tutti i cicli successivi e qualunque sia il risultato del paragone flag sarà sempre 1.
Ecco come scriverei io il codice:
codice:
#include <cstdlib>
#include <stdio.h>
int main() {
int a[6]= { 1,3,2,3,1,5 };
int b[6];
int i,j,k,x;
int flag=0;
for(k=0; k<6; k++) { // azzero il vettore B
b[k]=0;
}
for(i=1; i<6; i++) { //Confronto ogni elemento con il resto dell'array
flag=0;//ogni volta devi riportare flag a 0
for(j=0; j<6; j++) {
if (i!=j){
if( a[i] == a[j]) {
flag=1;
}
}
}
if(flag == 0) {
b[i]=a[i];
}
}
printf("%d " , b[0]);//eviti la virgola finale
for(x=1; x<6; x++){ //stampo a video l'array ottenuto
printf(",%d " , b[x]);
}
return 0;
}
Spero di esserti stato d'aiuto!

Fammi sapere!