1、1.一元多项式相加(10 分)成绩: 10 / 折扣: 0.8题目说明:编 写 一 元 多 项 式 加 法 运 算 程 序 。 要 求 用 线 性 链 表 存 储 一 元 多 项 式 ( 参 照课 本 ) 。 该 程 序 有 以 下 几 个 功 能 :1. 多 项 式 求 和输 入 : 输 入 三 个 多 项 式 , 建 立 三 个 多 项 式 链 表 Pa、 Pb、 Pc ( 提 示 : 调 用 CreatePolyn(polynomial using std:cout;using std:endl;struct dateint a;int b;struct date* pnext;type
2、def 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;coutab“;if(p-pnext=NULL)coutpnext;if(f=0)cout“pnext; /skip headif(p2!=NULL) p2=p2-pnext;while(p1!=NULL)p3=p3-pnext;p3-a=p2-a;p3-b=p2-b;p3-pnext=NULL;p2=p2-pnext;else if(p1-bb)p3-pnext=(P
3、DATE)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;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
4、=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);output(P4);add(P4,P3,P5);output(P5);0 约瑟夫问题(10 分)成绩: 10 / 折扣: 0.80 约瑟夫问题 成绩 10 分 折扣 0.8 (本题要求用循环链表实现)0 ,1, 2, 3 题,只能选做
5、三题.约瑟夫问题是一个经典的问题。已知 n 个人(不妨分别以编号 1,2,3,n 代表)围坐在一张圆桌周围,从编号为 k 的人开始,从 1 开始顺时针报数 1, 2, 3, .,顺时针数到m 的那个人,出列并输出。然后从出列的下一个人开始,从 1 开始继续顺时针报数,数到m 的那个人,出列并输出, 依此重复下去,直到圆桌周围的人全部出列。 输入:n,k,m 输出:按照出列的顺序依次输出出列人的编号,编号中间相隔一个空格,每 10 个编号为一行。 非法输入的对应输出如下a) 输入:n、k、m 任一个小于 1输出:n,m,k must bigger than 0. b) 输入:kn输出:k sho
6、uld 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=(PDATE) malloc (sizeof(DATE);pt-a=a;pt-next=p-next;p-next=pt;return pt;int count;PDATE del(PDATE p0)i
7、f(!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“,if(!(n0else if(mn)printf(“k should not bigger than n.n“);elsePDATE p=NULL;PDATE head=(DATE *)malloc(sizeof(DATE);head-next=head;head-a
8、=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 综教楼后有一个深坑,关于这个坑的来历,有很多种不同的说法。其中一种说法是,在很多年以前,这个坑就已经在那里了。这种说法也被大多数人认可,这是因为该坑有一种特别的结构,想要人工建造是有相当困难的。从横截面图来看,坑底成阶梯状,由从左至右的 1.N 个的平面构成(其中 1 N 100,000),如图:
9、 : : 8 7 6 5 4 #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=num;p-pl=p0;p-pr=NULL;p0-pr=p;p-h=h;p-w=w;r
10、eturn 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=left;pt=left;scanf(“%d“,long long* timedate=new long longn+1;for(long i=0;iwh;scanf(“%d%d“,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;