if(a[i]==1) printf("%*d ",3,i);
%3dじゃなくて %*d の * の部分を後ろの引数で引用しているところは?