c++约瑟夫环问题,跪求高手指错

来源:百度知道 编辑:UC知道 时间:2024/09/21 18:15:57
主要用数据结构中的单项循环链表。
编号为1,2,3,。。。。n的n个人按顺时针方向围坐一圈,每人持有一个正整数密码,一开始任选一个正整数作为报数上限值m,从第一个人开始按顺时针方向自1开始报数,报到m时停止报数。报m的人出列,将他的密码作为新的m值,从他在顺时针方向上的下一个人开始重新从1报数,如此下去,直至所有人全部出列为止。设计一个程序求出出列顺序
测试数据n=7,m=20
输入3 1 7 2 4 8 4
输出6 1 4 7 2 3 5
拜托了!!!

#include<iostream>
using namespace std;
#include<malloc.h>
typedef struct circle//构造结构体
{
int data;
int rank;
struct circle *next;
}list;
void create(list *&l,int n)//创建一个单循环链表
{
list *p,*r;
int i;
l=(list *)malloc(sizeof( list));
l->rank=1;
cin>>l->data;
l->next=NULL;
r=l;
for(i=2;i<=n;i++)
{
p=(list *)malloc(sizeof( list));
cin>>p->data;
p->rank=i;
p=r->next;
r=p;
}
r->next=l;
}
void print(list *l,int m,int n)//程序主干,输入输出
{
list *p,*q;
p=l;
while(1){
if(p->next==p){ cout <

很简单写错了一行
应该是r->next = p; 你写成了 p=r->next;
我给你改了一下:
#include<iostream>
using namespace std;
#include<malloc.h>
typedef struct circle//构造结构体
{
int data;
int rank;
struct circle *next;
}list;
void create(list *&l,int n)//创建一个单循环链表
{
list *p,*r;
int i;
l=(list *)malloc(sizeof( list));
l->rank=1;
cin>>l->data;
l->next=NULL;
r=l;
for(i=2;i<=n;i++)
{
p=(list *)malloc(sizeof( list));
cin>>p->data;
p->rank=i;
r->next=p; //就是这里,我已经给你改过来了!
r=p;
}
r->next=l;
}
void print(list *l,int m,int n)//程序主干,输入输出
{
list *p,*q;
p=l;
while(1){
if(p->next==p){ cout << p->rank << endl; break; }
while(--m>0) { p = p->next; } //指针向后移动 m - 1 次
q = p;
while( q->next != p )
q = q->ne