猴子选大王程序设计
设有n(n<50)个猴子做成一个圈,开始报数选大王。其方法是从第一个猴子开始按1、2、3、…、m(m右用户输入)报数,如果某个候子数到m则退出竞选,该猴子的下一个猴子接着...
设有n(n<50)个猴子做成一个圈,开始报数选大王。其方法是从第一个猴子开始按1、2、3、…、m(m右用户输入)报数,如果某个候子数到m则退出竞选,该猴子的下一个猴子接着报数,直到只剩下一个猴子为止,最后剩下的猴子就是大王。要求如下: (1)使用单循环链表实现; (2)定义结点类,类的成员数据为:猴子编号、指向下一个猴子的指针; (3)定义成员函数建立猴子链表; (4)定义成员函数删除链表中数到m的猴子; (5)设计报数函数。 (6)设计完整的程序进行演示。 哪位高手帮个忙啊???麻烦了!!!
展开
展开全部
这是一个约瑟夫环的问题,这里有一个写好的程序,功能能实现,但是如果你想把它写成函数就自己去改吧,应该很简单,这里我就不修改了。 #include<iostream> //定义结构体 typedef struct Joseph { int date; struct Joseph *next; struct Joseph *forie; }JOS; void main() { JOS *p,*head,*tail;//结构体指针,用来对结构体进行操作 int num,count,i; p = new JOS; head = p; tail = p; //约瑟夫环内有多少节点 cout<<"输入循环总数:"; cin>>num; cout<<"输入循环跳转的个数:"; cin>>count; //建立约瑟夫还 cout<<"请输入数据:"; cin>>p->date; p->next = head; cout<<endl; for(i=1;i<num;i++) { p = new JOS; cout<<"请输入数据:"; cin>>p->date; p->next=head; p->forie = tail; tail->next = p; tail = p; cout<<endl; }//建立结束 //开始循环,数到count个数,就删除,然后继续数 head->forie=p; p=head; while(p->next!=p) { for(i=1;i<count;i++) p=p->next; cout<<"删除的数是:"<<p->date<<endl; p->forie->next = p->next; p->next->forie = p->forie; p=p->next; } cout<<"最后剩余的数是:"<<p->date; }
麻烦采纳,谢谢!
麻烦采纳,谢谢!
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询