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;
}
---
쓸데없는게 추가되서 다시올림
쓸데없이 복잡하네;;
이거 수능 모의고사 문제아님?\
걍 수학적으로 풀어;;