题目大意:编号为1,2,3,……,n的n个人按顺时针方向围坐一圈。任选一个正整数作为报数上限m,从第一个人开始按顺时针方向自1开始顺序报数,报到m时停止报数。报m的人出列,从他在顺时针方向上的下一个人开始重新从1报数,如此下去,直至所有人全部出列为止。设计程序输出出列顺序。
#include<iostream>
const int MaxSize=1000;
using namespace std;
class CircList
{
public:
void fun(int data[],int n,int k);
private:
int data[MaxSize];
int sum;
int k;
};
void CircList::fun(int data[],int n,int m)
{
int i=0,j=0,count=0;
while(count<=n-1)
{
if(data[i]!=0)
j++;
if(j==m)
{
data[i]=0;
cout<<i+1<<"-->";
count++;
j=0;
}
i++;
if(i==n)
i=0;
}
}
void main()
{
CircList c;
int data[MaxSize];
int i,n,m;
cout<<"输出人员总数n(n<MaxSize=1000):"<<endl;
cin>>n;
for(i=1;i<=n;i++)
data[i]=i;
cout<<"输出报号m(m<n):"<<endl;
cin>>m;
cout<<endl;
c.fun(data,n,m);
cout<<endl;
}
[此贴子已经被作者于2007-4-6 17:33:47编辑过]