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!