老婆心ながら突っ込ませて頂きます。

> for (j = 0; flag = 0 || j < i; j++){ // 重複の検査
比較演算子ではなく代入になってます。コンパイラも警告を出しているかと。
i--;を入れているなら、flagは要らないんでは?戻せば良いだろうし。

あと、すでに出たものと重複しないか、確認するやり方は
一瞬で処理が終わる場合は気づかないが、かなり効率が悪いっす。