围圈报数
输入数据m和n,表示m个人,编号为1,2,3..........m,围城一个圆圈,从1开始报数,报到n的人就退出,下一个人接着重新从1开始报数,直到最后只剩下一个人时结束,输出依序退出的人的编号,以及最后剩下的人的编号。
#include<iostream>
using namespace std;
#define NULL 0;
typedef struct number
{
int num;
struct number *next;
};
int main()
{
int i,n,m;
while(cin>>n>>m)
{
struct number *p,per[100],*pre;
for(i=0;i<n;i++)
{
per[i].num=i+1; //初始化数值
if(i==n-1)
per[i].next=&per[0]; // <循环>链表的建立
else
per[i].next=&per[i+1];
}
p=per;
for(i=1;;i++)
{
if(i==m)
{
pre->next=p->next;
cout<<p->num<<endl; // 数到m ,m退出,输出数值
}
if(i==m+1)
i=1; //循环
pre=p;
p=p->next;
if(p==pre)
break; //只剩下最后一个了
}
cout<<p->num<<endl;
}
return 0;
}