北工大数据结构上机实验报告1

实验一报告

姓名:

学号:

完成日期:

2015年4月7日

题目:设有n 个人坐在一个圆桌周围,现从第s 个人开始报数,数到第m 的人出列,然后从出列的下一个人重新开始报数,数到第m 的人又出列,如此反复直到所有的人全部出列为止。Josephus 问题是:对于任意给定的n 、s 、m ,求出按出列次序得到的n 个人员的序列。试在计算机上模拟Josephus 问题的求解工程。

1、 需求分析

输入形式、输入值的范围:输入的值必须为正整数

输出形式:输出为一组正整数

程序功能:对于任意给定的n 、s 、m ,求出按出列次序得到的n 个人员的序 列。

测试数据:正确的输入:6 3 2

正确的输出:4 6 2 5 3 1

错误的输入:6 3 2

错误的输出:1 2 3 4 5 6

2、 概要设计

主程序流程:

3、 调试分析

调试中并遇到的问题:运行结果少一个数

解决方案:在while 循环的限制条件中,是循环次数加1 算法时空分析:O(n)

4、 用户使用说明

运行程序后,用户按照提示顺序输入3个正整数,然后按回车可得到结果

5、 测试结果

输入:6 3 2

输出:4 6 2 5 3 1

6、 源程序

以顺序表实现:

#include

using namespace std;

void JJ(int n,int s,int m)

{

int *a=new int [10000];

int i;

int count=0;

int t=0;

for(i=0;i

a[i]=i+1;

}

i=s-1;

cout

while(count

{

if(a[i]!=0)

t++;

if(t==m){

t=0;//记数归0

couta[i]=0;//给删除的数组赋0

count++;//退出人数加1

}

i++;

if(i==n)

i=0;//报数到末尾后i 恢复为0

}

cout

}

void main()

{

int n,s,m;

cout

cin>>n;

cout

cin>>s;

cout

cin>>m;

JJ(n,s,m);

}

以链表实现:

#include

using namespace std;

typedef struct LNode

{

int data;

struct LNode *next;

}LNode,*LinkList;

void JJ(int n,int s,int m)

{

LinkList p,r,list=NULL;

int i;

//建立一个循环链表

for(i=0;i

{

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

p->data=i+1; //存放第i 个结点的编号

if(list==NULL)

list=p;

else

r->next=p;

r=p;

}

p->next=list;

p=list;

for(i=1;i

{

r=p;

//当m!=1,但s=1时如果没有这条语句,此时删除动作无法完成 p=p->next;

}//此时p 指向第1个出发结点

cout

while(p->next!=p)

{

for(i=1;i

{

r=p;

p=p->next;

} //p指向第m 个结点,r 指向第m-1个结点 r->next=p->next; //删除第m 个结点

coutdata

delete p;

p=r->next;

}

coutdata;

cout

}

void main()

{

int n,s,m;

cout

scanf("%d",&n);

cout

scanf("%d",&s);

cout

scanf("%d",&m);

JJ(n,s,m);

}

实验一报告

姓名:

学号:

完成日期:

2015年4月7日

题目:设有n 个人坐在一个圆桌周围,现从第s 个人开始报数,数到第m 的人出列,然后从出列的下一个人重新开始报数,数到第m 的人又出列,如此反复直到所有的人全部出列为止。Josephus 问题是:对于任意给定的n 、s 、m ,求出按出列次序得到的n 个人员的序列。试在计算机上模拟Josephus 问题的求解工程。

1、 需求分析

输入形式、输入值的范围:输入的值必须为正整数

输出形式:输出为一组正整数

程序功能:对于任意给定的n 、s 、m ,求出按出列次序得到的n 个人员的序 列。

测试数据:正确的输入:6 3 2

正确的输出:4 6 2 5 3 1

错误的输入:6 3 2

错误的输出:1 2 3 4 5 6

2、 概要设计

主程序流程:

3、 调试分析

调试中并遇到的问题:运行结果少一个数

解决方案:在while 循环的限制条件中,是循环次数加1 算法时空分析:O(n)

4、 用户使用说明

运行程序后,用户按照提示顺序输入3个正整数,然后按回车可得到结果

5、 测试结果

输入:6 3 2

输出:4 6 2 5 3 1

6、 源程序

以顺序表实现:

#include

using namespace std;

void JJ(int n,int s,int m)

{

int *a=new int [10000];

int i;

int count=0;

int t=0;

for(i=0;i

a[i]=i+1;

}

i=s-1;

cout

while(count

{

if(a[i]!=0)

t++;

if(t==m){

t=0;//记数归0

couta[i]=0;//给删除的数组赋0

count++;//退出人数加1

}

i++;

if(i==n)

i=0;//报数到末尾后i 恢复为0

}

cout

}

void main()

{

int n,s,m;

cout

cin>>n;

cout

cin>>s;

cout

cin>>m;

JJ(n,s,m);

}

以链表实现:

#include

using namespace std;

typedef struct LNode

{

int data;

struct LNode *next;

}LNode,*LinkList;

void JJ(int n,int s,int m)

{

LinkList p,r,list=NULL;

int i;

//建立一个循环链表

for(i=0;i

{

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

p->data=i+1; //存放第i 个结点的编号

if(list==NULL)

list=p;

else

r->next=p;

r=p;

}

p->next=list;

p=list;

for(i=1;i

{

r=p;

//当m!=1,但s=1时如果没有这条语句,此时删除动作无法完成 p=p->next;

}//此时p 指向第1个出发结点

cout

while(p->next!=p)

{

for(i=1;i

{

r=p;

p=p->next;

} //p指向第m 个结点,r 指向第m-1个结点 r->next=p->next; //删除第m 个结点

coutdata

delete p;

p=r->next;

}

coutdata;

cout

}

void main()

{

int n,s,m;

cout

scanf("%d",&n);

cout

scanf("%d",&s);

cout

scanf("%d",&m);

JJ(n,s,m);

}


相关内容

  • 算法试验一_求最大公约数实验报告_
  • 昆明理工大学信息工程与自动化学院学生实验报告 ( 2012 - 2013 学年 第 1 学期 ) 课程名称:算法设计与分析 开课实验室:信自楼应用.网络机房445 2012 年10月25日 一.上机目的及内容 1. 上机内容 求两个自然数m 和n 的最大公约数. 2. 上机目的 (1)复习数据结构课 ...

  • 最大公约数三种办法,计数器,流程图
  • 昆明理工大学信息工程与自动化学院学生实验报告 ( 2012 - 2013 学年 第 1 学期 ) 课程名称:算法设计与分析 开课实验室: 信自楼机房442 2012 年10月 18日 一.上机目的及内容 1. 上机内容 求两个自然数m 和n 的最大公约数. 2. 上机目的 (1)复习数据结构课程的相 ...

  • 哈工大[材料力学_-_I_]课程教学大纲
  • <材料力学 - I >课程教学大纲 课程中文名称:材料力学 课程英文名称: Mechanics of Materials 总学时: 98 讲课学时: 64 习题学时: 8 实验学时: 8 上机学时: 18 授课对象: 机械.建筑.交通.材料.动力.能源等专业本科生 先修课程:高等数学,理 ...

  • 北工大学激光院研究生学术活动心得报告
  • 北工大学激光院研究生 学术活动心得报告 第三届"学海启航"研究生新生沙龙 本次报告由郑坤(副教授).孙荣毅主持的. 刚刚开始研究生阶段的学习不过一个多月的时间,这将是一个不同于本科阶段的学习历程.面对着学习和科研方面的困惑,校研究生会请来了全国优秀博士论文的获得者.现任北京工业大 ...

  • 计算机信息类综合实验课程设计与实践
  • !墅堕!!!!二!!!! CNll一2034/T 实验技术与管理 ExperimentalTechnologyand 第32卷第4期2015年4月 V01.32 No.4 Apr.2015 Management 实验课程改革 计算机信息类综合实验课程设计与实践 王变琴,刘树郁,许海州,刘 (中山大学 ...

  • 哈工大电路自主实验报告
  • 姓名 陈若兰 班级 1104102 学号 1110410223 实验日期 成绩 实验名称:验证互易定理 1.实验目的 (1).验证互易定理,加深对互易定理的理解: (2).进一步熟悉仪器的使用. 2. 总体设计方案或技术路线 (1).实验原理: 互易定理: 对一个仅含有线性电阻(不含独立源和受控源) ...

  • 软件项目管理实验大纲
  • <软件项目管理> 实验大纲 丁琼 2011-2-21 目录 一.实验课程的任务与要求 ..................................................... 2 二.实验设备及要求 ................................... ...

  • 经济预测与决策实验报告-副本
  • 重 庆 交 通 大 学 学 生 实 验 报 告 实验课程名称 经济预测与决策上机实验报告 开课实验室 学 院 管理学院 年级 09级 专业班 工商管理2班 学 生 姓 名 杨乐晨 学 号 09040229 开 课 时 间 经济预测与决策实验报告 实验一 实验名称:一元线性回归预测上机实验. 实验目的 ...

  • 统计学上机实验报告[1]
  • 统计图表 一.上机项目名称:EXCEL.SPSS绘制统计图表 二.上机时间.地点:2010年 9月 16日,上午10:20-12:10 基础楼综合实验室 三.上机目的.内容.步骤及结果 目的:掌握EXCEL.SPSS统计图表的基本操作 内容:教材29页4题EXCEL:30页6题SPSS 步骤及结果: ...