这个程序是啥意思啊

来源:百度知道 编辑:UC知道 时间:2024/06/09 10:40:00
设计函数fri(int m,n)功能是将m个人围成一圈,编号为1-m,从1号开始报数,报到n的倍数的人离开,一直数下去,知道最后只剩下1人,求此人的编号。----------------我是这么想的,假设有5个人,那么第一轮报数完毕后2号和4号离开,还剩3个,接下来问题来了,第二轮开始报数的人应该报6还是1,程序的结果也将因此而不同,大家帮我分析下这题的本意是什么,顺便写下代码吧,谢谢了~~~~~vc++

类,循环链表,这是约瑟夫问题!很常见的!每个人手里一个编号!
#include<iostream>
using namespace std;
//链表结点类number为这个人的编号
struct person
{
unsigned int number;
person *next;
};
//约瑟夫环类,此类包含多个person类,并控制输入输出.
class joseph_ring
{
private:
unsigned int n;//用于存放人数
unsigned int m;
unsigned int k;
person *head;//链表的头结点
public:
joseph_ring(){n=0;head=NULL;}//构造函数,把成员变量赋初值
void create();//建立环的成员函数
void show();//运算并输出的成员函数
};

void joseph_ring::create()

{
cout<<"请输入人数n:";
cin>>n;
cout<<"请输入m的初值:";
cin>>m;
cout<<"请输入第一个开始报数的人的编号k:";
cin>>k;
//定义2个临时指针
person *p1,*p2;
//for循环中用于初始化环
for(int i=1;i<=n;i++)
{
p1=new person;//新实例化一个"人"的对象
p1->number=i;//给这个"人"编个号
//如果当前链表为空,头结点指向第一个"人"
if(i==1) <