| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 849 人关注过本帖
标题:约瑟夫环求解-->song4转移
只看楼主 加入收藏
wusilou
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2006-4-17
收藏
 问题点数:0 回复次数:2 
约瑟夫环求解-->song4转移


//ReadCirLinkList_L.cpp
//To Read The Joseph Number

#include <stdlib.h>
#include <iostream.h>
#include <conio.h>
#include <malloc.h>

#define m 20

typedef struct CirLNode
{ int data;
struct CirLNode *next;
}CirLNode,*CirLinkList;

void CreateCirList_L(CirLinkList &L,int n) //CreateList_L() function
{ //To Creatre a LinkList L with HeadNode
int i;
CirLNode *p;
CirLNode *q;
L=(CirLinkList)malloc(sizeof(CirLNode));
L->next=NULL;

cout<<"Please input the data for LinkList Nodes: <eg. 3,1,7,2,4,8,4......>"<<endl;

for(i=n;i>0;--i)
{
p=(CirLinkList)malloc(sizeof(CirLNode));
q=(CirLinkList)malloc(sizeof(CirLNode));
cin>>p->data;
p->next=L->next;
q->next=p;
L->next=p;
}//end of for
if(n) cout<<"Success to Create a LinkList !"<<endl<<endl;
else cout<<"A NULL LinkList have been created !"<<endl;
}//end of CreateList() function

void ReadJosephList_L(CirLinkList &L,int n,int m)
{
CirLNode *p,*q;

int i,j,k=1;
int l[m];


p=L;
q=NULL;
j=1;

do
{
while(j<m+1)
{
++j;
q=p;
p = p->next;
}
l[k] = p->data;
p->next=q->next;
free(q);
p=q->next;

j=1;
k++;
}

while(p->next!=p);
l[k] = p->data;

cout<< "The Joseph Number is:"<<endl;
for(i=1;i<k+1;i++)
cout<<l[i]<<endl;
cout<<endl;
}

void main()
{
CirLinkList L;
CirLNode *p;
int m,j,n;
int CirLListNodeNum;
cout << "Read Joseph number.cpp"<<endl<<"======================"<<endl<<endl;
cout << "Please input the CirLinkListNodeNum:<eg.n>";
cin >> CirLListNodeNum;
cout <<endl<< "The CirLinklist to be< eg. 3,1,7,2,4,8,4......>"<<endl;
CreateCirList_L(L,CirLListNodeNum);

cin>>m;
if(m<=20)
{
ReadJosephList_L(L,n,m);
}
else
cout<<"It is error"<<endl;
}

约瑟夫问题的求解,红色部分为什么在编译的时侯有错误呢?
(约瑟夫问题:编序为1,2,...n的n个人按顺时针方向围坐一圈,每人持有一个密码(正整数),一开始人选一个整数作为报数上限m,从第一个人开始按顺时针方向从自1开始顺序报数,报到m时停止报数.报m的人出列,将他的密码作为新的m值,从他的顺时针方向上的下一个人开始从1报数,如此下去,知道所有人全部出列为止,设计一个程序求出出列顺序.
采用单循环链表模拟此程序,按照出列的顺序印出各人的编号
测试数据:m的初值为20;n=7,7个人的密码依次为3,1,7,2,4,8,4.首先m的值为6(正确的出列顺序为6,1,4,7,2,3,5))

搜索更多相关主题的帖子: 约瑟夫 求解 
2006-04-26 15:31
ooooo
Rank: 1
等 级:新手上路
威 望:1
帖 子:135
专家分:0
注 册:2005-6-24
收藏
得分:0 
#define m 20
会把形参中的m展开

2006-05-27 10:38
pandaboy
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2006-6-28
收藏
得分:0 
不知道为什么 老是有点错误.
2006-06-28 19:54
快速回复:约瑟夫环求解-->song4转移
数据加载中...
 
   



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

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