下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、6-1 工作备忘录的生成(链表)(10 分 )每天都要处理很多事务,为了更好地安排工作,希望在每天开始工作前,根据工作记录,生成工作备忘录。首先输入工作记录数(大于0 的一个整数),再逐条输入各条工作记录,每条工作记录包括:工作名,开始时间,结束时间。假设每项工作的开始时间均小于它的结束时间,并且各项工作的开始时间互不相同。我们的工作是需要把这些工作记录按开始时间排序并输出,在输出时,如果某项工作与若干项工作冲突(在做该项工作时,需要同时做其它工作),则在该工作名前加'*' 。函数接口定义:Node* add(Node *, Node *);void display(Node
2、*);裁判测试程序样例:#include<iostream>#include <string>using namespace std;struct Nodestring name;int start;int end;Node *next;Node* add(Node *, Node *);void display(Node *);bool check(Node *head) if(head=NULL | head->next=NULL) return true;Node *p=head->next;if(head->start > p->s
3、tart) return false;return check(p);int main()Node *head=NULL, *p;int i, repeat;cin>>repeat;for(i=0;i<repeat;i+)p = new Node;cin>>p->name>>p->start>>p->end;p->next=NULL;head = add(head, p);if(!check(head) cout<<"ERROR"<<endl;display(head);r
4、eturn 0;/* 请在这里填写答案*/输入样例:4aaa 19 20ccc 169 200ddd 153 170bbb 20 111输出样例:aaa 19 20bbb 20 111*ddd 153 170*ccc 169 200把节点 p 插入到链表,按照任务的起始时间升序排列Node* add(Node *head, Node *p) / Node *q = head, *s = head;while(q != NULL)&&(q->start < p->start) /当前的 q 节点不是末尾,并且q 节点的起始时间早于 p 节点的起始时间s = q;
5、q = q->next;/if(q = head)/s/p始终在 q 的前面直到当前节点NULL或者q 的起始时间晚于p 的起始时间应该接在链表的开始位置,即成为新的表头p->next = head; head = p;elsep->next = q;s->next = p;return head;void display(Node *head)Node *p = head, *q;用于标识是否有冲突当前 p 节点不空,是有效任务bool conflict; / while(p != NULL) /conflict = false;q = head;while(!con
6、flict && q != p) if(q->end > p->start) conflict = true; break;q = q->next;q = p->next;while(!conflict && q != NULL) if(p->end > q->start) conflict = true;break;q = q->next;if(conflict) /cout << "*"/p/p检查 p 的开始时间是否小于p 之前的任务的结束时间之前的任务的结束时间如果大于
7、p 的开始时间则冲突检查 p 的结束时间是否大于p 之后的任务的开始时间之后的任务的开始时间如果大于p 的结束时间则冲突cout << p->name << " " << p->start << " " << p->end << endl; p = p->next;6-2 函数调用(10 分 )编写三个函数:求两个整数的最大值、最小值、和。分别用这三个函数作为实参,再写一个计算函数compute,对两个整数进行各种计算。其中一个形参为指向具体算法函数的指针。函
8、数接口定义:int max(int a, int b);int min(int a, int b);int sum(int a, int b);int compute(int a, int b, int(*func)(int, int);裁判测试程序样例:在这里给出函数被调用进行测试的例子。例如:#include <iostream>using namespace std;int max(int a, int b);int min(int a, int b);int sum(int a, int b);int compute(int a, int b, int(*func)(int
9、, int);int main()int a, b, res;cin >> a >> b;res = compute(a, b, & max);cout << "Max of " << a << " and " << b << " is " << res << endl;res = compute(a, b, & min);cout << "Min of " << a
10、<< " and " << b << " is " << res << endl;res = compute(a, b, & sum);cout << "Sum of " << a << " and " << b << " is " << res << endl; return 0;/* 请在这里填写答案*/输入样例:3 5输出样例:Max of
11、 3 and 5 is 5Min of 3 and 5 is 3Sum of 3 and 5 is 8int max(int a, int b) if(a>b) return a; else return b; int min(int a, int b) if(a<b) return a; else return b; int sum(int a, int b) return a+b; int compute(int a, int b, int(*func)(int, int) return (*func)(a,b);6-3 函数指针(理科实验班)7分 )梦山高中现需要将某普通班的
12、最优秀学生调整入理科实验班。为此,将从两个方面考察学生,一是数学和英语两门课的总分;另一个是所有四门课的总分。分别找出两科总分和全科总分的第一名,并从中决定调整人选。输入将首先输入学生数n, (n 为不超过80 的正整数); 接下来依次输入各位学生的学号,数学、英语、语文、理科综合成绩。学号及四科成绩均为不超过的正整数。输出时:第一行输出两科总分第一的学号,第二行输出四科总分第一的学号。约定在两位学生成绩相同时,优先选择学号较小的学生;各位学生的学号均不相同。裁判测试程序样例:#include <iostream>using namespace std;constint N=80;
13、struct Studentintnum;int score4;/* 请在这里填写答案*/int main()inti, j, k, n;bool s2(const Student &, const Student &);bool s4(const Student &, const Student &);Student stN;cin>>n;for(i=0;i<n;i+)cin>>sti.num;for(j=0;j<4;j+) cin>>sti.scorej;cout<<select(st, n, s2
14、)<<endl;cout<<select(st, n, s4)<<endl;输入样例:36 148 150 120 2525 148 150 117 2607 145 148 128 287输出样例:57bool s2(const Student &s1, const Student &s2) /比较 s1 和 s2 两位学生的数学+英语大小,如果s2 的大则返回trueif(s1.score0 + s1.score1 < s2.score0 + s2.score1) return true;if(s1.score0 + s1.scor
15、e1 = s2.score0 + s2.score1 && s1.num > s2.num) return true; return false;bool s4(const Student &s1, const Student &s2)/ 比较 s1 和 s2 两位学生的总分大小,如果s2 的大则返回trueif(s1.score0 + s1.score1 + s1.score2 + s1.score3 <s2.score0 + s2.score1 + s2.score2 + s2.score3)return true;if(s1.score0 +
16、s1.score1 + s1.score2 + s1.score3 =s2.score0 + s2.score1 + s2.score2 + s2.score3 && s1.num > s2.num)return true;return false;int select(Student s, int n, bool (*p)(const Student &s1, const Student &s2)int maxIndex = 0;for(int i = 1; i < n; i+)if(*p)(smaxIndex, si) maxIndex = i;
17、return smaxIndex.num;6-4 二维数组(海绵城市)(7 分 )根据海绵城市建设指挥部要求,怡山小学将对校内道路进行改造,铺设透水砖。这样有些道路将不能通行。为了 不妨碍假期少先队的校内活动安排,大队宣传委员小黄需要知道一些关键的活动地点是否可以到达。已知校内一共有20 处建筑,分别标为1 号楼,号楼, ,号楼。有些楼之间有道路连接,道路是双向的,如果楼与楼间有道路,那么既可以从楼到楼,也可以从楼到楼。首先将输入校内的道路数n, 接下来分n 行输入各条道路的信息,每行有两个整数(均在和之间),代表这两座楼之间有道路连接。接下来输入查询数m, 然后分m行输入要查询的楼间连路信息
18、,每行有两个整数(均在和之间)。如果两楼之间可以通过一条路径到达(中途有可能经过其它楼), 则输出两楼是连接的,否则输出两楼是断开的。函数接口定义:完成查询两建筑是否连通的函数test裁判测试程序样例:#include <iostream>using namespace std;const int N=21;/* 请在这里填写答案*/int main()int aNN=0, n, m, i, j, k;cin>>n;for(i=0;i<n;i+)cin>>j>>k;ajk=akj=1;cin>>m;for(i=0;i<m;
19、i+)cin>>j>>k;cout<<j<<'-'<<k<<' 'if(test(a, j, k) cout<<"connected"<<endl; else cout<<"disconnected"<<endl;return 0;·输入样例:21 22 331 32 4输出样例:1-3 connected1-4 disconnectedbool test(int aNN, int j, int
20、 k)/利用深度优先搜索找到一条从j 到 k 的通路,若不存在则返回false/ 维护一个一维数组,模拟栈的操作,从j 开始深搜到一个邻居i 且没有搜索过,则将i 入栈,如果i=k 则搜索成功/ 维护一个一维数组,有N 个元素,用于记录某个楼是否搜索过int stackN+1 = 0; / 存储从 j 开始走过的路径,如j m n t ,表示从j 开始经过m n 走到了 tbool visitedN+1 = false;int top = 0; /top 记录数组stack 的最后一个元素的位置,/ 首先 j 入栈stack+top = j;visitedj = true;while(top
21、> 0) / 当前栈不空int cur = stacktop-; /得到当前栈顶/ 把与 cur 连接的所有未访问过的楼号压入栈for(int i = 0; i < N; i+) if(acuri = 1 && visitedi = false)stack+top = i;if(i = k) return true; /访问到 k 则表示从j 到 k 有通路visitedi = true;return false;6-5 引用作函数形参交换两个整数(10 分 )设计一个void 类型的函数Swap,该函数有两个引用类型的参数,函数功能为实现两个整数交换的操作。裁判测
22、试程序样例:#include <iostream>using namespace std;void Swap(int& x,int& y)int temp;temp = x;x = y;y = temp;int main()int a, b;cin >> a >> b;Swap(a, b);cout << a << " " << b << endl;return 0;输入样例:3 5输出样例:5 36-6 函数重载实现两数相加(15 分 )设计一个重载函数add,该函数有两个
23、参数,可以实现两个类型相同的参数相加的操作,函数返回相加的结果。两个参数可以是整数、实数和字符串,但必须保证两个参数类型相同。裁判测试程序样例:#include <iostream>#include <string>#include <iomanip>using namespace std;int add(int x,int y)return x+y;double add(double x,double y)return x+y;string add(string x,string y)return x+y;int main()int a, b;double
24、 c, d;string s1, s2;cin >> a >> b;cin >> c >> d;cin >> s1 >> s2;cout << add(a, b) << endl;cout << fixed << setprecision(2) << add(c, d) << endl;cout << add(s1, s2) << endl;return 0;输入样例:3 53.3333 5.555555hello world输
25、出样例:88.89helloworld6-7 带默认形参值的函数(10 分 )设计一个带默认形参值的函数add,该函数有三个参数,可以实现三个整数类型的参数相加的操作,函数返回相加的结果。默认形参值从右至左分别是30、 20。裁判测试程序样例: #include <iostream>using namespace std;int add(int x,int y=20,int z=30) return x+y+z;int main()int a, b, c;cin >> a >> b >> c;cout << add(a) <&l
26、t; endl;cout << add(a, b) << endl;cout << add(a, b, c) << endl; return 0;输入样例:1 2 3输出样例:513366-8 使用动态内存分配的冒泡排序(20 分 )编程实现冒泡排序函数int* bubble_sort(int n); 。其中 n 为数组长度(1 n 1000)。函数接口定义如下:int* bubble_sort(int n);/*对长度为n 的数组 arr 执行冒泡排序*/请实现 bubble_sort 函数,使排序后的数据从小到大排列。要求在bubble_so
27、rt 函数内使用动态内存分配方式分配一个大小为n 的数组,再读入待排序数据,排序完成后返回数组。裁判测试程序样例:#include <iostream>using namespace std;int* bubble_sort(int n);/*对长度为n 的数组执行冒泡排序*/int main()int n;cin >> n;int* a = bubble_sort(n);for (int i = 0; i < n; i+) cout << ai;if (i < n - 1)cout << " "cout <
28、< endl;return 0;/* 你的代码将嵌在这里*/输入样例:1015168 28139 13714 27801 22208 32524 21653 8353 28341 25922输出样例:8353 13714 15168 21653 22208 25922 27801 28139 28341 32524int* bubble_sort(int n)int *a=new intn;int i;for(i=0;i<n;i+)cin>>ai;for(i=0;i<n;i+)for(int j=0;j<n-1-i;j+)if(aj>aj+1)int
29、temp;temp = aj+1;aj+1=aj;aj=temp;return a;delete a;6-9 逆序字符串(10 分 )设计一个void 类型的函数reverse_string , 其功能是将一个给定的字符串逆序。例如, 给定字符串为“hello逆序后为“olleh ”。函数接口定义如下:/* 函数原型参见main 函数 */裁判测试程序样例:#include <iostream>#include <string> using namespace std;/* 你的代码将嵌在这里*/int main(int argc, char const *argv)s
30、tring str;getline(cin, str);/ 输入字符串reverse_string(str); /逆序字符串strcout << str << endl;/ 输出逆序后的字符串return 0;输入样例:hello输出样例:ollehvoid reverse_string(string &str)int n;char t;n = str.length();for(int i=0;i<n/2;i+)t=stri;stri=strn-1-i;strn-1-i=t;7-1 时间换算(10 分 )输入一个正整数repeat (0<repeat
31、<10) ,做 repeat 次下列运算:输入一个时间数值,再输入秒数n ,输出该时间再过n 秒后的时间值,时间的表示形式为时: 分 : 秒,超过24 时从 0 时重新开始计时。输出格式:printf("time: %d:%d:%dn", );输入输出示例:括号内为说明,无需输入输出输入样例:3(repeat=3)0:0:159( 秒数n=59)11:59:4030( 秒数n=30)23:59:40301( 秒数 n=301)输出样例:time: 0:1:0(0:0:01 加上 59 秒的新时间)time: 12:0:10(11:59:40 加上 30 秒的新时间)t
32、ime: 0:4:41(23:59:40 加上 301 秒的新时间)#include <iostream>using namespace std;struct Timeint hour;int minute;int second;void timeCompute(Time &t, int sec)int h, m, s;int a;s = t.second + sec;a = s / 60; / 分钟的进位t.second = s % 60; / 进位后剩余的秒数m = t.minute + a;a = m / 60;t.minute = m % 60;h = t.hour
33、 + a;t.hour = h % 24;int main()int repeat, sec;cin >> repeat;Time t;for(int i = 1; i <= repeat; i+)scanf("%d:%d:%d", &t.hour, &t.minute, &t.second);cin >> sec;timeCompute(t, sec);printf("time: %d:%d:%dn", t.hour, t.minute, t.second);7-2 查找单价最高和最低的书籍(10
34、分 )编写程序,从键盘输入n (n<10) 本书的名称和定价并存入结构数组中,查找并输出其中定价最高和最低的书的名称和定价。输出格式语句:printf("highest price: %.1f, %sn", );printf("lowest price: %.1f, %sn",);输入输出示例:括号内为说明,无需输入输出输入样例:3(n=3)Programming in C21.5Programming in VB18.5Programming in Delphi 25输出样例:highest price: 25.0, Programming in
35、 Delphilowest price: 18.5, Programming in VB#include<iostream>#include<string>using namespace std;struct BOOKchar name20;double price;BOOK;int main()int i,n,j,k,max=0,min=0;scanf("%d",&n);struct BOOK an;for(i=0;i<n;i+)scanf("%sn",);scanf("%lf",
36、&ai.price);for(j=0;j<n;j+)if(aj.price>amax.price) max=j;for(k=0;k<n;k+)if(ak.price<amin.price)min=k;printf("highest price: %.1f, %sn",amax.price, );printf("lowest price: %.1f, %sn",amin.price,);return 0;#include <iostream>using namespace std;struct Bookchar name50;float price;int main()int bookCnt;cin >>
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 硝苯地平考试题目及答案解析
- 事业单位兽医招聘笔试题及答案分享
- 关于灵芝的试题及精准答案
- 外科护士模拟试题及答案呈现
- 2025-2026学年开原市三年级数学第二学期期末质量跟踪监视试题含答案解析
- 心肺复苏应急相关试题及参考答案
- 医博士关于心悸的题目及答案
- WPS模拟题目2及完整答案
- 小学方程单元测试卷及答案
- 2026公司企业党员个人工作思想报告(3篇)
- 2025年海南三沙市事业单位公开招聘笔试试卷(含完整答案解析)
- 江苏盐城东台市2026年专职网格员招聘考试试卷-含答案解析
- 浙江省杭州市富阳区共同体学校2026-2027学年六上数学期末调研模拟试题含解析
- 2026年公务员遴选本土实务笔试习题及答案
- 2026年1月浙江省选考物理试题(纯答案版)
- 译林版三年级英语下册Unit2 Clean our classroom作业单
- 东方枢纽集团笔试题答案
- k近邻算法课件
- 中国平安IQ测评题库
- 食物与能量的转换
- 中级护士聘任申请书范文
评论
0/150
提交评论