openjudge SDAU 约瑟夫环问题

来源:互联网 发布:诺基亚6220c软件 编辑:程序博客网 时间:2024/06/06 15:17

1:约瑟夫环问题


链接 : http://sdau.openjudge.cn/list/1/
总时间限制: 
1000ms 
内存限制: 
1000kB
描述
约瑟夫环是一个数学的应用问题:已知n个人(以编号1,2,3...n分别表示)围坐在一张圆桌周围。从编号为k的人开始报数,数到m的那个人出列;他的下一个人又从1开始报数,数到m的那个人又出列;依此规律重复下去,直到圆桌周围的人全部出列。
输入
8 1 3 (n=8 k=1 m=3 )
输出
7 (剩下的那个)
样例输入
8 1 3
样例输出
7
题目大意:
如题。
思路:
链表必讲例题。。
感想:
第一次写链表,感觉还是挺好的。嘻嘻。
AC代码:
#include<iostream>using namespace std;struct list{    int number;    list *next;};int main(){    list *head,*s,*p,*q;int n,i;    while(cin>>n)    {    s=new list;    s->number=1;    head=s;    for(i=2;i<=n;i++)    {        p=s;        s=new list;        p->next=s;        s->number=i;    }    s->next=head;    int beg,cou;    cin>>beg>>cou;    q=s;    p=head;    for(i=1;i<beg;i++)    {        q=p;        p=p->next;    }    int num=0;    while(666)    {        num++;        if(num==n) break;        for(i=1;i<cou;i++)        {            q=p;            p=p->next;        }        q->next=p->next;        //cout<<p->number<<endl;        delete p;        p=NULL;        p=q->next;    }    cout<<p->number<<endl;    }}
0 0