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; } }