| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 984 人关注过本帖
标题:终于把约瑟环的程序改好了,大家提下意见吧!
只看楼主 加入收藏
ephemerality
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2006-6-7
收藏
 问题点数:0 回复次数:1 
终于把约瑟环的程序改好了,大家提下意见吧!

约瑟夫环:将编号为12,…,nn个人按顺时针方向围坐一圈,每人持有一个密码(正整数)。一开始任选一个正整数作为报数上限值m,从第一个开始按顺时针方向自1开始报数,报到m时停止报数。报m的人出列,将他的密码作为新的m值,从他在顺时针方向上的下一个人开始重新从1报数,如此下去,直至所有人全部出列为止。试设计一个程序求出出列顺序。设m的初值为20,密码为:3172484

// cx.cpp : Defines the entry point for the console application.

//

#include "stdafx.h"

#include<stdlib.h>

#include<iostream.h>

typedef struct LNode

{

int num,pwd;

struct LNode *next;

}LNode, *LinkList;

void main()

{

int a,i,m,n,j;//m为报数上限值,n为人数,j为输入的密码;

cout<<"please enter m and n:";

cin>>m>>n;

LinkList p,p1,pt;

p1=(LinkList)malloc(sizeof(LNode));

p=p1;

for(i=1;i<n;i++)

{

pt=(LinkList)malloc(sizeof(LNode));

p->next=pt;

p=pt;

}

pt->next=p1;

pt=p1;

p=p1;//建立n个节点;

cout<<"please enter the password:";

for(i=1;i<=n;i++)

{

cin>>j;

p->num=i;

p->pwd=j;

p=p->next;

}//输入密码;

for(i=1;i<=n;i++)

{ for(a=1;a<m-1;a++)

{ p=p->next;}

if (m==1)

{m=pt->pwd;

cout<<pt->num;

cout<<",";

p=pt->next;

}

else{ pt=p->next;

m=pt->pwd;

cout<<pt->num;

cout<<",";//输出出列顺序

}

p->next=pt->next;

free(pt);

pt=p->next;

p=pt;

}

}

搜索更多相关主题的帖子: 约瑟 意见 
2006-06-09 22:57
飞在天上的鱼
Rank: 1
等 级:新手上路
帖 子:32
专家分:0
注 册:2005-11-6
收藏
得分:0 

我们互相提提意见把!我着也编了约瑟夫问题!看看呗!

#include"god.h"
void main()
{
int size,number;
cout<<"输入结点总数:";
cin>>size;
cout<<"输入取出序号:";
cin>>number;
List T1,T2;
for(int i=1;i<=size;i++)
T1.insert(i*2);
cout<<T1;
for(int j=0;j<size;j++)
T1.find(number,T2);
cout<<T2;
system("pause");
}

#include<iostream>
using namespace std;
class List;
ostream& operator<< (ostream&,List&);
class ListNode
{
int data;
ListNode* link;
friend class List;
friend ostream& operator<< (ostream&,List&); //试试成员函数???????????
};

class List
{
ListNode *head,*flag; //flag为记数起始点的标志
public:
List();
~List(){delete head;}
bool find(const int i,List&); // *****重点函数
List& insert(const int t); // ***末段插入
List& del(const int t); // ***末段删除
ListNode* hd();
friend ostream& operator<< (ostream&,List&); //试试成员函数???????????

};
//******************************
List::List()
{
ListNode* p;
p=new ListNode;
head=p;
p->link=head;
p->data=0;
}
//****************************

bool List::find(const int i,List& T)
{
ListNode *p,*q;
p=flag;
if(i<1)
{
cerr<<"查找出错!";
exit(1);
}
for(int index=1;index<i-1;index++) //for(int index=0;index<i && p->link!=head;index++)
{
if(p==head)p=p->link;
p=p->link;
}
if(p->link==head)p=p->link;
q=p->link;
flag=q->link;
p->link=q->link; //以上为连接为循环表
T.insert(q->data);
delete q; // T.del(p->data); 保留头节点head
return true;
}
//*****************************

List& List::insert(const int t)
{
ListNode *p,*q;
p=new ListNode;
p->data=t;
q=head;
while(q->link!=head)q=q->link;
q->link=p;
p->link=head; //单结点,和其它情况均成立
flag=head->link;
return *this;
}

//*****************************

List& List::del(const int t)
{
ListNode*p,*q;
p=head;
while(p!=head)
if(p->data==t)
{
q=p->link;
p->link=q->link;
delete q;
}
else
p=p->link;
return *this;
}

//****************************
ListNode* List::hd()
{
return head;
}
//****************************
ostream& operator<<(ostream& out,List& L)
{
ListNode* p;
p=L.head; //不能把链表附给接点指针????????friend 为什么不行
p=p->link;
while(p!=L.head)
{
out<<p->data<<" ";
p=p->link;
}
out<<endl;
return out;
}

//*************************


2006-06-12 17:48
快速回复:终于把约瑟环的程序改好了,大家提下意见吧!
数据加载中...
 
   



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

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