http://gall.dcinside.com/board/view/?id=programming&no=505679




int last = 0;

int cou = 0;


out(t)

{

if (t == 1) {

printf("\n");

return;

}

out(t >> 1);

printf("%d", (t & 1));

}


outa(a,b,c,d,t)

{

if (!a) {

if (!(a + b + c + d) && (last != (t<<1)))

out(last = t<<1, cou++);

return;

}

outa(a - 1, b, c, d, (t << 1));

outb(a - 1, b, c, d, (t << 1));

}


outb(a,b,c,d,t)

{

if (!b) {

if (!(a + b + c + d) && (last != (t<<1)))

out(last = t<<1, cou++);

return;

}

outc(a, b - 1, c, d, (t << 1));

outd(a, b - 1, c, d, (t << 1));

}


outc(a,b,c,d,t)

{

if (!c) {

if (!(a + b + c + d) && (last != (t<<1)+1))

out(last = (t<<1)+1, cou++);

return; 

}

outa(a, b, c - 1, d, (t << 1)+1);

outb(a, b, c - 1, d, (t << 1)+1);

}


outd(a,b,c,d,t)

{

if (!d) {

if (!(a + b + c + d) && (last != (t<<1)+1))

out(last = (t<<1)+1, cou++);

return; 

}

outc(a, b, c, d - 1, (t << 1)+1);

outd(a, b, c, d - 1, (t << 1)+1);

}


int start(n,a,b,c,d)

{

cou = 0;

outa(a, b, c, d, 1);

outb(a, b, c, d, 1);

outc(a, b, c, d, 1);

outd(a, b, c, d, 1);

return cou;

}


int main()

{

printf("\n%d\n\n", start(6, 2, 1, 1, 1));

printf("\n%d\n\n", start(10, 4, 2, 2, 1));

return 0;

}


---

쓸데없는게 추가되서 다시올림


쓸데없이 복잡하네;;