| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 742 人关注过本帖
标题:[求助]用VC++写的约瑟夫环 测试不通过
只看楼主 加入收藏
琪尔默默
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2006-4-14
收藏
 问题点数:0 回复次数:1 
[求助]用VC++写的约瑟夫环 测试不通过

小妹我学的不好,还请大家帮帮改改~谢了
程序是没有错误了 但是测试数据不对
m=20 n=7 7个人密码分别为3 1 7 2 4 8 4时
出列顺序应该是6 1 4 7 2 3 5
可我得不出这个答案

#include<iostream.h>

struct LNode{
int data,code;
LNode *next;
};

int m,n;

void Create(LNode *head) //初始化单向循环链表
{
LNode *p;
int i;
cout<<"输入各人密码:"<<endl;
head->data=1;
cin>>head->code ;
p=head;
for(i=2;i<=n;i++) {
LNode *s=new LNode;
s->data=i;
cin>>s->code;
p->next=s;
p=s ;
}
p->next=head;
}

int Put(LNode *q) //处理出列顺序
{
int i;
LNode *p;
p=q;
while(n!=1) {
for(i=1;i<m;i++){
p=p->next;
}
q=p->next;
p->next=q->next;
m=q->code;
cout<<q->data<<endl;
delete q;
n--;
i=1;
}
return p->data;
}

void main()
{
LNode *head,*q;
head=new LNode;
q=head;
cout<<"输入初始报数上限值m: "<<endl;
cin>>m;
cout<<"输入人数n: "<<endl;
cin>>n;
Create(head);
cout<<"出列顺序为: "<<endl;
Put(q);
}

搜索更多相关主题的帖子: 约瑟夫 
2006-07-05 22:14
hubin
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2006-7-6
收藏
得分:0 

//joseph.h
#include<iostream.h>
#include<string.h>
#define inistM 6
#define LEN 20
typedef int Elemtype;
typedef struct Lnode{
Elemtype num;
Elemtype key;
Lnode *next;
}Lnode;
class sclink
{ Lnode *curr;
int count;
public:
sclink(){ curr=NULL;count=0;}
// ~sclink(){ delete curr;}
void creatsclink(int);//创建单循环链表
bool sclinkEmpty();//判断单循环链表是否为空
void next(int pos);//当前curr指向第pos个结点
Elemtype Deletecurr(Elemtype &);//删除当前结点,并返回其值
void seljoseph();//约瑟夫环的实现
void display();//显示链表的信息
void seljoseph1();//约瑟夫环的实现
};
//joseph.cpp
#include"joseph.h"
#include<iostream.h>
#define inistM 6
void sclink::creatsclink(int sum)
{ count=sum;
Lnode *p1=new Lnode;
curr=new Lnode;
int data1[LEN];
for(int i=0;i<count;i++)
cin>>data1[i];
curr->num=1;
curr->key=data1[0];
p1=curr;
for(int j=1;j<count;j++)
{ Lnode *p=new Lnode;
p->num=j+1;
p->key=data1[j];
p1->next=p;
p->next=p;
p1=p;
}
p1->next=curr;

}
bool sclink::sclinkEmpty()
{ if(!curr)return true;
else return false;
}
void sclink::next(int pos)
{ Lnode *q=new Lnode;
q=curr;int j=1;
while(q&&j<pos)
{ q=q->next;
j++;
}
curr=q;
}
Elemtype sclink::Deletecurr(Elemtype &e)
{ Lnode *pre=new Lnode;
Lnode *post=new Lnode;
post=curr;
pre=curr->next;
int data2=curr->num;
e=curr->key;
if(pre==curr){curr=NULL;return data2;}
else{ while(pre->next!=curr)pre=pre->next;
pre->next=post->next;
curr=curr->next;
return data2;
}
}
void sclink::seljoseph()
{ int m=inistM;
while(!sclinkEmpty())
{ Lnode *p=curr;
if(p->next==curr){cout<<p->num;break;
}
else{ for(int step=0;step<m-1;step++)curr=curr->next;
while(p->next!=curr)p=p->next;
Lnode *p1=curr;
curr=curr->next;
p->next=p1->next;
m=p1->key;
cout<<p1->num;
}

}
}
void sclink::display()
{ for(int w=0;w<count;w++){
cout<<curr->key;
curr=curr->next;}
}
void sclink::seljoseph1()
{ int circle=inistM;
while(!sclinkEmpty())
{ next(circle);
cout<<Deletecurr(circle);}
}
void main()
{ sclink j;
j.creatsclink(7);
//j.display();
//j.seljoseph();
j.seljoseph1();

}

在vc++编辑通过

2006-07-06 16:58
快速回复:[求助]用VC++写的约瑟夫环 测试不通过
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.055574 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved