#include <stdio.h>
#include <stdlib.h>
typedef struct _Node{
int number;
struct _Node* next;
}Node;
Node *createList(int n);
void freeList(Node* head);
int solveJosephus(Node **head, int step);
int n;
int main(){
long long k;
while( scanf("%d%d", &n
, &k
)!=EOF
){ Node *head;
// get the beginning position of head
// head to store the Node
head = createList(n);
printf( "%d\n", solveJosephus
(&head
, k
) ); //freeList(head);
}
return 0;
}
//linked list
Node *createList(int n)
{
Node *head, *now;
for(int i=1; i<=n; i++)
{
//建一個linked list 要創一個新的list把它塞進去
Node
*newN
= (Node
*)malloc(sizeof(Node
));
newN->number = i;
if(i==1) head = newN;
else now->next = newN;
now = newN;
}
now->next = head;
return head;
}
//finding the number left
int solveJosephus(Node **head, int step)
{
Node *p, *q;
p = *head;
while(p->next != p)
{
if(n<=step)
{
int tmp = step;
tmp = tmp%n;
for(int i=1; i<tmp-1; i++)
{
p = p->next;
n = n - 1;
tmp = step;
tmp = tmp % n;
if(tmp==1)
{
q = p->next;
p->next = q->next;
p = p->next;
}
}
q = p->next;
//做 接 的動作
p->next = q->next;
p = p->next;
n = n - 1;
tmp = step;
tmp = tmp % n;
}
else
{
for(int i=1; i<step-1; i++)
{
p = p->next;
}
q = p->next;
p->next = q->next;
p = p->next;
}
}
return p->number;
}
//free the old data
void freeList(Node *head)
{
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KCnR5cGVkZWYgc3RydWN0IF9Ob2RlewogICAgaW50IG51bWJlcjsKICAgIHN0cnVjdCBfTm9kZSogbmV4dDsKfU5vZGU7Ck5vZGUgKmNyZWF0ZUxpc3QoaW50IG4pOwp2b2lkIGZyZWVMaXN0KE5vZGUqIGhlYWQpOwppbnQgc29sdmVKb3NlcGh1cyhOb2RlICoqaGVhZCwgaW50IHN0ZXApOwoKaW50IG47CgppbnQgbWFpbigpewogICAgbG9uZyBsb25nIGs7CiAgICB3aGlsZSggc2NhbmYoIiVkJWQiLCAmbiwgJmspIT1FT0YgKXsKICAgICAgICBOb2RlICpoZWFkOwogICAgICAgIC8vIGdldCB0aGUgYmVnaW5uaW5nIHBvc2l0aW9uIG9mIGhlYWQKICAgICAgICAvLyBoZWFkIHRvIHN0b3JlIHRoZSBOb2RlCiAgICAgICAgaGVhZCA9IGNyZWF0ZUxpc3Qobik7CiAgICAgICAgcHJpbnRmKCAiJWRcbiIsIHNvbHZlSm9zZXBodXMoJmhlYWQsIGspICk7CiAgICAgICAgLy9mcmVlTGlzdChoZWFkKTsKICAgIH0KICAgIHJldHVybiAwOwp9CgovL2xpbmtlZCBsaXN0Ck5vZGUgKmNyZWF0ZUxpc3QoaW50IG4pCnsKICAgIE5vZGUgKmhlYWQsICpub3c7CiAgICBmb3IoaW50IGk9MTsgaTw9bjsgaSsrKQogICAgewogICAgICAgIC8v5bu65LiA5YCLbGlua2VkIGxpc3Qg6KaB5Ym15LiA5YCL5paw55qEbGlzdOaKiuWug+WhnumAsuWOuwogICAgICAgIE5vZGUgKm5ld04gPSAoTm9kZSopbWFsbG9jKHNpemVvZihOb2RlKSk7CgogICAgICAgIG5ld04tPm51bWJlciA9IGk7CiAgICAgICAgaWYoaT09MSkgaGVhZCA9IG5ld047CiAgICAgICAgZWxzZSBub3ctPm5leHQgPSBuZXdOOwogICAgICAgIG5vdyA9IG5ld047CiAgICB9CiAgICBub3ctPm5leHQgPSBoZWFkOwogICAgcmV0dXJuIGhlYWQ7Cn0KCi8vZmluZGluZyB0aGUgbnVtYmVyIGxlZnQKaW50IHNvbHZlSm9zZXBodXMoTm9kZSAqKmhlYWQsIGludCBzdGVwKQp7CiAgICBOb2RlICpwLCAqcTsKICAgIHAgPSAqaGVhZDsKICAgIHdoaWxlKHAtPm5leHQgIT0gcCkKICAgIHsKICAgICAgICBpZihuPD1zdGVwKQogICAgICAgIHsKICAgICAgICAgICAgaW50IHRtcCA9IHN0ZXA7CiAgICAgICAgICAgIHRtcCA9IHRtcCVuOwogICAgICAgICAgICBmb3IoaW50IGk9MTsgaTx0bXAtMTsgaSsrKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBwID0gcC0+bmV4dDsKICAgICAgICAgICAgICAgIG4gPSBuIC0gMTsKICAgICAgICAgICAgICAgIHRtcCA9IHN0ZXA7CiAgICAgICAgICAgICAgICB0bXAgPSB0bXAgJSBuOwogICAgICAgICAgICAgICAgaWYodG1wPT0xKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIHEgPSBwLT5uZXh0OwogICAgICAgICAgICAgICAgICAgIHAtPm5leHQgPSBxLT5uZXh0OwogICAgICAgICAgICAgICAgICAgIHAgPSBwLT5uZXh0OwogICAgICAgICAgICAgICAgICAgIGZyZWUocSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcSA9IHAtPm5leHQ7CiAgICAgICAgICAgIC8v5YGaIOaOpSDnmoTli5XkvZwKICAgICAgICAgICAgcC0+bmV4dCA9IHEtPm5leHQ7CiAgICAgICAgICAgIHAgPSBwLT5uZXh0OwogICAgICAgICAgICBmcmVlKHEpOwoKICAgICAgICAgICAgbiA9IG4gLSAxOwogICAgICAgICAgICB0bXAgPSBzdGVwOwogICAgICAgICAgICB0bXAgPSB0bXAgJSBuOwogICAgICAgIH0KICAgICAgICBlbHNlCiAgICAgICAgewogICAgICAgICAgICBmb3IoaW50IGk9MTsgaTxzdGVwLTE7IGkrKykKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgcCA9IHAtPm5leHQ7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcSA9IHAtPm5leHQ7CiAgICAgICAgICAgIHAtPm5leHQgPSBxLT5uZXh0OwogICAgICAgICAgICBwID0gcC0+bmV4dDsKICAgICAgICAgICAgZnJlZShxKTsKICAgICAgICB9CiAgICB9CiAgICByZXR1cm4gcC0+bnVtYmVyOwp9CgovL2ZyZWUgdGhlIG9sZCBkYXRhCnZvaWQgZnJlZUxpc3QoTm9kZSAqaGVhZCkKewoKfQo=