SDUT OJ 约瑟夫问题

约瑟夫问题

Time Limit: 1000 ms  Memory Limit: 65536 KiB
Submit  Statistic  Discuss

Problem Description

n个人想玩残酷的死亡游戏,游戏规则如下: 

n个人进行编号,分别从1到n,排成一个圈,顺时针从1开始数到m,数到m的人被杀,剩下的人继续游戏,活到最后的一个人是胜利者。

请输出最后一个人的编号。

Input

输入n和m值。

Output

输出胜利者的编号。

Sample Input

5 3

Sample Output

4

Hint

第一轮:3被杀第二轮:1被杀第三轮:5被杀第四轮:2被杀

#include 
#include 

struct node
{
    int data;
    struct node *next;
};


int main()
{
    int n,m,i;
    scanf("%d %d",&n,&m);
    struct node *head, *tail, *p, *q;
    head=(struct node *)malloc(sizeof(struct node));
    head->next=NULL;
    tail=head;
    head->data=1;
    for(i=0; idata=i+2;
        p->next=NULL;
        tail->next=p;
        tail=p;
    }
    tail->next=head;


    p=tail;              //从第一个数字(head->data)开始数,需要找到这个数的前一个记为p;
    while(p->next!=p){

        for(i=0; inext;
        }
        p->next=p->next->next;
        //q=p->next;
        //p->next=q->next;

    }
    printf("%d",p->data);







    return 0;
}

你可能感兴趣的:(SDUT,OJ,链表,————数据结构————)