还剩3页未读,继续阅读
文本内容:
实验一报告姓名学号完成日期年月日201547题目设有n个人坐在一个圆桌周围,现从第s个人开始报数,数到第m的人出列,然后从出列的下一个人重新开始报数,数到第m的人又出列,如此反复直到所有的人全部出列为止Josephus问题是对于任意给定的n s、m,求出按出列次序得到的n个人员的序列试在计算机上模拟Josephus问题的求解工程、需求分析1输入形式、输入值的范围输入的值必须为正整数输出形式输出为一组正整数程序功能对于任意给定的n、s、m,求出按出列次序得到的n个人员的序列正确的输出:462531测试数据正确的输入632错误的输出:123456错误的输入:主程序流程:输入数据信息创建数组或链表,并将编号存入
3、调试分析是否全部出列调试中并遇到的问题运行结果少一个数解决方案在while循环的限制条件中,是循环次数加1算法时空分析On、用户使用说明4运行程序后,用户按照提示顺序输入3个正整数,然后按回车可得到结果、测试结果5输入632输出
462531、源程序6以顺序表实现#includeiostream usingnamespace std;void JJint n,int s,int mint*a=new int
[10000];int i;int count=0;int t=0;fori=0;in;i++{a[i]=i+l;i=s-l;出列次序为:“;coutvv”whilecountn-l ifa[i]!=0;t++ift==m{〃记数归t=0;0依次输出删除的编号〃给删除的数组赋cout«a[i]v””;//a[i]=0;0〃退出人数力口;count++;1i++ifi==n〃报数到末尾后恢复为i=0;i0cout«endl;void mainintn,s,m;请输入总人数:coutvv”vvendl;cin»n;”请输入开始报数的人员序号:〈cout Vendl;cin»s;”请输入出列人员的序号:cout endl;cin»m;JJn,s,m;以链表实现#includeiostreamusing namespacestd;typedef struct LNode intdata;structLNode*next;}LNode,*LinkList;void JJintn,int s,int mLinkList p,r,list=NULL;int i;〃建立一个循环链表fori=0;in;i++p=LinkListmallocsizeofLNode;〃存放第个结点的编号p-data=i+1;iiflist==NULLlist=p;elser-next=p;二;r Pp-next=list;p=list;fori=l;is;i++二;r p〃当但时如果没有这条语句,此时删除动作无法完成m!=l,s=l p=p-next;}〃此时指向第个出发结点p1出列次序为coutcv”whilep-next!=pfori=l;im;i4-+;r=p p=p-next;指向第个结点指向第个结点}//p m,r m-1〃册除第个结点r-next=p-next;U mcout«p-data«n n;delete p;p=r-next;cout«p-data;cout«endl;void mainintn,s,m;”请输入总人数:cout endl;%scanf d”,n;请输入开始报数的人员序号:“《cout«”endl;scanfn%dn,s;”请输入出列人员的序号:cout endl;%scanf d”,m;JJn,s,m;。