프로그래밍 알고리즘
[정올 3101] 요세푸스 문제1
꾸준한사람
2023. 1. 9. 06:58
반응형
http://www.jungol.co.kr/bbs/board.php?bo_table=pbank&code=3101
JUNGOL
www.jungol.co.kr
#include <stdio.h>
struct Node {
Node* pPrev;
Node* pNext;
int my;
Node(int n) : pPrev(this), pNext(this), my(n) {}
Node(Node* pp, Node* pn, int n) : pPrev(pp), pNext(pn), my(n) { pp->pNext = this; pn->pPrev = this; }
};
int N, K;
Node* pFirst;
void Input()
{
scanf("%d %d", &N, &K);
Node* pN = pFirst = new Node(1);
for (int i = 2; i <= N; i++)
{
pN = new Node(pN, pN->pNext, i);
}
}
Node* pop()
{
int n = K;
while (--n) { pFirst = pFirst->pNext; }
return pFirst;
}
int main(void)
{
Input();
Node* pTmp;
while (1) {
pTmp = pop();
printf("%d ", pTmp->my);
pTmp->pPrev->pNext = pTmp->pNext;
pTmp->pNext->pPrev = pTmp->pPrev;
pFirst = pTmp->pNext;
if (pFirst->pNext == pFirst) {
printf("%d ", pFirst->my);
break;
}
}
return 0;
}
반응형