Description
设有n个人围坐一圈并按顺时针方向从1到n编号,从第1个人开始进行1到m的报数,报数到第个m人,此人出圈,再从他的下一个人重新开始1到m的报数,如此进行下去直到所剩下一人为止。
input
输入多行,每行2个数,分别表示n和m.
output
计算每一行中最后剩下这个人的编号.
Sample imput
10 3
Sample output
4
用循环链表写的...
代码:
#include<iostream> using namespace std; typedef struct node{ int data; struct node *next; }LNode,*LinkList; int main() { int n,i,m; while(cin>>n>>m){ LinkList p,head,s; head=(LinkList ) malloc(sizeof(LNode)); head->next=NULL; for(i=n;i>=1;i--) { p=(LinkList )malloc(sizeof(LNode)); if(n==i) s=p; p->data=i; p->next=head->next; head->next=p; } s->next=head->next; i=1; while(p->next!=p) { p=p->next; s=s->next; i++; if(i==m) { p=p->next; s->next=p; i=1; } } cout<<p->data<<endl; } return 0; }
Source