读书人

约瑟夫环(为什么最后输出的出对序列是

发布时间: 2012-05-21 18:04:41 作者: rapoo

约瑟夫环(为什么最后输出的出对序列是乱码,求高手修改,急啊!!!)

#include<time.h>
#include<cstdlib>
#include<iostream>

using namespace std;

struct LNode
{
int num;
int password;
LNode *next; /*生成n个结点的单向循环链表 */
};
typedef LNode* LinkList;

void createList(LinkList &head,int);
void game(LinkList &head,int ,int );
void printList(LinkList head,int);
int n,m;
int main()
{
LinkList head;
cout<<"请输出围圈人数: \n";
cin>>n;
cout<<"请给出一个上报限数: \n";
cin>>m;
while(n<1||m<1) //防止输入出错,增强强壮性
{
cout<<"输入人数有误,请重新输入:\n";
cout<<"请输入参与人数:\n";
cin>>n;
cout<<"请给出一个上报限数: \n";
cin>>m;
}
createList(head,n);
printList(head,n);

cout<<"出列的顺序如下:"<<endl;
game(head,m,n);
}
void createList(LinkList &head,int n)
{
int i,j;
LinkList p=head,r;
srand((int)time(0));
for(i=0; i<n; i++)
{
j=1+(int)rand()%10;
r=p;
p=new LNode; /*创建新的结点*/
p->num=i+1;
p->password=j;
r->next=p;
}
p->next=head->next;
p=head;
head=head->next;
}
void game(LinkList &head,int m,int n)
{
int j;
LinkList p,s;
p=head;
while(n>0)
{
for(j=1;j<m;j++)
{
s=p;
s=s->next;
p=p->next;
}
s->next=p->next;
cout<<p->num<<" ";
m=p->password;
free(p);
p=s->next;

n--; /*每循环一次人是减1*/
}
cout<<endl;
}
void printList(LinkList head,int n)
{
LinkList p=head;
int i;
for(i=0;i<n;i++)
{
cout<<"num:"<<p->num<<" "<<"password:"<<p->password<<endl;
p=p->next;
}

}


[解决办法]
问题1:head没有进行初始化
问题2:方法game中注意注释掉的那行,多余的,会导致错误!

C/C++ code
#include<time.h>#include<cstdlib>#include<iostream>using namespace std;struct LNode{  int num;  int password;  LNode *next; /*生成n个结点的单向循环链表 */};typedef LNode* LinkList;void createList(LinkList &head,int);void game(LinkList &head,int ,int );void printList(LinkList head,int);int n,m;int main() {  LinkList head = new LNode;  cout<<"请输出围圈人数: \n";  cin>>n;  cout<<"请给出一个上报限数: \n";  cin>>m;  while(n<1||m<1) //防止输入出错,增强强壮性  {  cout<<"输入人数有误,请重新输入:\n";  cout<<"请输入参与人数:\n";  cin>>n;  cout<<"请给出一个上报限数: \n";  cin>>m;  }  createList(head,n);  printList(head,n);  cout<<"出列的顺序如下:"<<endl;  game(head,m,n);   system("pause");   return 0; }void createList(LinkList &head,int n){  int i,j;  LinkList p=head,r;  srand((int)time(0));  for(i=0; i<n; i++)  {      j=1+(int)rand()%10;      r=p;      p=new LNode;       p->num=i+1;      p->password=j;      r->next=p;  }  p->next=head->next;  p=head;  head=head->next;}void game(LinkList &head,int m,int n){  int j;  LinkList p,s;  p=head;  while(n>0)  {      for(j=1;j<m;j++)      {          s=p;          //s=s->next;          p=p->next;                }      s->next=p->next;      cout << p->num <<" ";      m=p->password;      free(p);      p=s->next;      n--;  }  cout<<endl;}void printList(LinkList head,int n){  LinkList p=head;  int i;  for(i=0;i<n;i++)  {  cout<<"num:"<<p->num<<" "<<"password:"<<p->password<<endl;  p=p->next;  }} 

读书人网 >C++

热点推荐