北京理工大学数据结构编程练习进步标准答案.doc
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_05.gif)
《北京理工大学数据结构编程练习进步标准答案.doc》由会员分享,可在线阅读,更多相关《北京理工大学数据结构编程练习进步标准答案.doc(144页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、,.1.一元多项式相加(10分)成绩: 10 / 折扣: 0.8题目说明:编写一元多项式加法运算程序。要求用线性链表存储一元多项式(参照课本)。该程序有以下几个功能:1. 多项式求和输入:输入三个多项式,建立三个多项式链表Pa、Pb、Pc (提示:调用CreatePolyn(polynomial &P,int m)。输出:显示三个输入多项式Pa、Pb、Pc、和多项式Pa+Pb、多项式Pa+Pb+Pc (提示:调用AddPolyn(polynomial &Pa, polynomial Pb), 调用PrintPolyn(polynomial P)。0. 退出输入:根据所选功能的不同,输入格式要求
2、如下所示(第一个数据是功能选择编号,参见测试用例): 1 多项式A包含的项数,以指数递增的顺序输入多项式A各项的系数(整数)、指数(整数)多项式B包含的项数,以指数递增的顺序输入多项式B各项的系数(整数)、指数(整数)多项式C包含的项数,以指数递增的顺序输入多项式C各项的系数(整数)、指数(整数) 0 操作终止,退出。 输出:对应一组输入,输出一次操作的结果(参见测试用例)。 1 多项式输出格式:以指数递增的顺序输出: ,参见测试用例。零多项式的输出格式为 0 无输出 1.#include#includeusing std:cin;using std:cout;using std:endl;s
3、truct dateint a;int b;struct date* pnext;typedef struct date DATE;typedef struct date* PDATE;void output(PDATE p)int f=0;p=p-pnext;while(p!=NULL)if(p-a!=0)f=1;couta,b;if(p-pnext=NULL)coutendl;elsecoutpnext;if(f=0)coutpnext;/skip headif(p2!=NULL) p2=p2-pnext;while(p1!=NULL)&(p2!=NULL)if(p1-bp2-b)p3-p
4、next=(PDATE)malloc(sizeof(DATE);p3=p3-pnext;p3-a=p2-a;p3-b=p2-b;p3-pnext=NULL;p2=p2-pnext;else if(p1-bb)p3-pnext=(PDATE)malloc(sizeof(DATE);p3=p3-pnext;p3-a=p1-a;p3-b=p1-b;p3-pnext=NULL;p1=p1-pnext;elsep3-pnext=(PDATE)malloc(sizeof(DATE);p3=p3-pnext;p3-a=p1-a+p2-a;p3-b=p1-b;p3-pnext=NULL;p1=p1-pnext
5、;p2=p2-pnext;/end whileif(p1=NULL)p3-pnext=p2;if(p2=NULL)p3-pnext=p1;int main()int flag;int n;PDATE P6=NULL;PDATE p=NULL;for(int i=0;ia=0;Pi-b=0;Pi-pnext=NULL;cinflag;if(flag=1)for(int i=1;in;while(n-!=0)p-pnext=(PDATE)malloc(sizeof(DATE);p=p-pnext;cinp-ap-b;p-pnext=NULL;output(Pi);add(P1,P2,P4);out
6、put(P4);add(P4,P3,P5);output(P5);0 约瑟夫问题(10分)成绩: 10 / 折扣: 0.80 约瑟夫问题成绩10分 折扣0.8 (本题要求用循环链表实现) 0 ,1, 2, 3题,只能选做三题.约瑟夫问题是一个经典的问题。已知n个人(不妨分别以编号1,2,3,n 代表)围坐在一张圆桌周围,从编号为 k 的人开始,从1开始顺时针报数1, 2, 3, .,顺时针数到m 的那个人,出列并输出。然后从出列的下一个人开始,从1开始继续顺时针报数,数到m的那个人,出列并输出,依此重复下去,直到圆桌周围的人全部出列。 输入:n,k,m 输出:按照出列的顺序依次输出出列人的编号
7、,编号中间相隔一个空格,每10个编号为一行。 非法输入的对应输出如下a) 输入:n、k、m任一个小于1输出:n,m,k must bigger than 0. b) 输入:kn输出:k should not bigger than n.例输入9,3,2输出4 6 8 1 3 7 2 9 5#include#include#includestruct dateint a;struct date* next;typedef struct date DATE;typedef struct date* PDATE;PDATE setnew(PDATE p,int a)PDATE pt;pt=(PDAT
8、E) malloc (sizeof(DATE);pt-a=a;pt-next=p-next;p-next=pt;return pt;int count;PDATE del(PDATE p0)if(!count)printf(n);count=10;printf(%d ,p0-a);PDATE p=p0-next;p0-a=p-a;p0-next=p-next;free(p);count-;return p0;int main()count=10;int n=0,k=0,m=0;scanf(%d,%d,%d,&n,&m,&k);if(!(n0&m0&k0)printf(n,m,k must bi
9、gger than 0.n);else if(mn)printf(k should not bigger than n.n);elsePDATE p=NULL;PDATE head=(DATE *)malloc(sizeof(DATE);head-next=head;head-a=1;p=head;for(int i=2;ia!=m)p=p-next;while(n)/int temp=k;int temp=k%n+n;while(-temp)p=p-next;del(p);n-;printf(n);2. 综教楼后的那个坑成绩: 10 / 折扣: 0.8描述在 LIT 综教楼后有一个深坑,关于
10、这个坑的来历,有很多种不同的说法。其中一种说法是,在很多年以前,这个坑就已经在那里了。这种说法也被大多数人认可,这是因为该坑有一种特别的结构,想要人工建造是有相当困难的。从横截面图来看,坑底成阶梯状,由从左至右的 1.N 个的平面构成(其中 1 N 100,000),如图: : : 8 7 6 5 4 - 高度 3 2 1平面 1 23 每个平面 i 可以用两个数字来描述,即它的宽度 Wi 和高度 Hi,其中 1 Wi 1,000、1 Hi 1,000,000,而这个坑最特别的地方在于坑底每个平面的高度都是不同的。每到夏天,雨水会把坑填满,而在其它的季节,则需要通过人工灌水的方式把坑填满。灌水
11、点设在坑底位置最低的那个平面,每分钟灌水量为一个单位(即高度和宽度均为 1)。随着水位的增长,水自然会向其它平面扩散,当水将某平面覆盖且水高达到一个单位时,就认为该平面被水覆盖了。请你计算每个平面被水覆盖的时间。 灌水 水满后自动扩散 | | * | * * | * * * * V * * V * * * * * * . * * * * * * : * * * * * * : * * * * * * * * * * * * * * * * * * * *4 分钟后 26 分钟后 50 分钟后平面 1 被水覆盖 平面 3 被水覆盖平面 2 被水覆盖输入输入的第一行是一个整数 N,表示平面的数量。
12、从第二行开始的 N 行上分别有两个整数,分别表示平面的宽度和高度。输出输出每个平面被水覆盖的时间。#include#includestruct datelong long * timedate;long h;int w;struct date* pl;struct date* pr;typedef struct date DATE;typedef struct date* PDATE;PDATE setnew(PDATE p0,int w,long h,long long * num)/p0为左邻PDATE p=(PDATE) malloc(sizeof(DATE);p-timedate=nu
13、m;p-pl=p0;p-pr=NULL;p0-pr=p;p-h=h;p-w=w;return p;void output(long long* p,long n)while(n-)printf(%lldn,*(+p);int main()long long myclock;long n;int w;long h;PDATE p=NULL,pt=NULL;/set leftpPDATE left=(PDATE) malloc(sizeof(DATE);left-timedate=NULL;left-pl=NULL;left-pr=NULL;left-h=1000000;left-w=0;p=le
14、ft;pt=left;scanf(%d,&n);long long* timedate=new long longn+1;for(long i=0;iwh;scanf(%d%d,&w,&h);p=setnew(p,w,h,timedate+i+1);if(pt-hh)pt=p;PDATE right=setnew(p,0,1000000,NULL);p=pt;myclock=0;while(p-pl-h!=p-pr-h)*(p-timedate)=myclock+p-w;/计算时间并删除合并if(p-pl-hp-pr-h) myclock+=(p-pr-h-p-h)*p-w;p-pr-w+=p
15、-w;p-pl-pr=p-pr;p-pr-pl=p-pl;pt=p;p=p-pr;delete pt;else if(p-pl-hpr-h)myclock+=(p-pl-h-p-h)*p-w;p-pl-w+=p-w;p-pl-pr=p-pr;p-pr-pl=p-pl;pt=p;p=p-pl;delete pt;/移至下一进水点if(p-pl-hp-h&p-pr-hp-h)continue;else if(p-pl-hpr-h)/左移while(p-hp-pl-h)p=p-pl;else /右移while(p-hp-pr-h)p=p-pr;myclock+=p-w;*(p-timedate)=m
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 北京理工大学 数据结构 编程 练习 进步 标准答案
![提示](https://www.taowenge.com/images/bang_tan.gif)
限制150内