首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

约瑟夫环(为什么最后输出的出对序列是乱码,求高手修改,),该怎么处理

2012-05-21 
约瑟夫环(为什么最后输出的出对序列是乱码,求高手修改,急啊!!!)#includetime.h#includecstdlib#includ

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

#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;  }} 

热点排行