没有合适的资源?快使用搜索试试~ 我知道了~
首页王道机试指南:考研复试上机实战宝典
王道机试指南:考研复试上机实战宝典
1星 需积分: 50 168 下载量 118 浏览量
更新于2024-07-17
12
收藏 2.96MB PDF 举报
"《王道机试指南》是一本专门为计算机考研考生准备的复习资料,特别针对考研复试中的上机考试部分提供了指导和实战训练。该指南由王道论坛(www.cskaoyan.com)编撰,旨在帮助考生应对国内高校越来越多地采用的上机考核模式,如ACM竞赛形式,强调实际动手编程能力的重要性。由于许多高校对复试成绩有严格的限制,如不及格即不予录取,因此对于从未接触过ACM的考生来说,提前准备和练习是必不可少的。 书中详细梳理了基础知识,确保考生能够在有限的题库中找到适合的练习题目,通过搭建的九度OnlineJudge平台(http://ac.jobdu.com),考生可以模拟真实考试环境进行实战训练。作者鼓励考生通过王道论坛账号登录,并提供了一个专门的复试机试讨论专区,以便在遇到问题时寻求帮助和交流经验。 作者强调,考研成功并非依赖于神秘的秘诀,而是日常的积累和勤奋。他们认为,一个连基本代码都无法撰写的学生,即使进入研究生阶段,也可能面临就业挑战。因此,《王道机试指南》不仅是一本复习资料,更是帮助考生提升技能,为未来职业生涯打下坚实基础的重要工具。 总结来说,这本书为考生提供了一套完整的上机考试准备策略,包括理论知识回顾、实践操作训练以及考试技巧分享,对于希望在考研路上取得优异成绩的计算机专业学生来说,这是一份不可或缺的参考资料。"
资源详情
资源推荐
类型组成的结构体进行排序。排序的规则在题面中已经明确给出。虽然该例中待
排序的个体的规模(N)表明我们可以使用冒泡排序,但这里我们依旧采用内置
的 sort 函数来完成解题,从而体会其方便快捷的特点。
代码 2.4
#include <stdio.h>
#include <algorithm>
#include <string.h>
using namespace std;
struct E {
char name[101];
int age;
int score;
}buf[1000];
bool cmp(E a,E b) { //实现比较规则
if (a.score != b.score) return a.score < b.score; //若分数不相同则分数低
者在前
int tmp = strcmp(a.name,b.name);
if (tmp != 0) return tmp < 0; //若分数相同则名字字典序小者在前
else return a.age < b.age; //若名字也相同则年龄小者在前
}
int main () {
int n;
while (scanf ("%d",&n) != EOF) {
for (int i = 0;i < n;i ++) {
scanf ("%s%d%d",buf[i].name,&buf[i].age,&buf[i].score);
} // 输入
sort(buf,buf + n,cmp); //利用自己定义的规则对数组进行排序
for (int i = 0;i < n;i ++) {
printf ("%s %d %d\n",buf[i].name,buf[i].age,buf[i].score);
} //输出排序后结果
}
return 0;
}
首先,我们定义了用来表示学生个体的结构体,其包含三个数据域:姓名、年
龄、成绩,并由输入部分对其分别进行赋值。由于这是我们自己定义的结构体,
不属于 C++的内置基本类型,计算机并不知道两个结构体之间的如何比较大小,
更不可能自动对其进行排序。于是,我们要做的即是向计算机说明该排序依据。
与上一例相同,我们采用定义一个比较函数 cmp 的方法来实现,并在其中对规
则的各要素进行详细的说明(如代码 2.4 所示)。一旦建立了 cmp 函数,该函数
便可作为计算机对其进行排序的依据,所以我们依然可以使用 sort 函数对其进行
快速排序,但是不要忘记,将 sort 的第三个参数设定为 cmp 函数,使 sort 函数
知道该应用什么规则对其进行定序。假如,你忽略了第三个参数,那么系统会以
不知道排序规则为由(找不到合适的“小于”运算符)而给出编译错误。
同样的,与编写 cmp 类似,我们也可以直接定义该结构体的小于运算符来说
明排序规则。
代码 2.5
#include <stdio.h>
#include <algorithm>
#include <string.h>
using namespace std;
struct E {
char name[101];
int age;
int score;
bool operator < (const E &b) const { //利用C++算符重载直接定义小于运算符
if (score != b.score) return score < b.score;
int tmp = strcmp(name,b.name);
if (tmp != 0) return tmp < 0;
else return age < b.age;
}
}buf[1000];
int main () {
int n;
while (scanf ("%d",&n) != EOF) {
for (int i = 0;i < n;i ++) {
scanf ("%s%d%d",buf[i].name,&buf[i].age,&buf[i].score);
}
sort(buf,buf + n);
for (int i = 0;i < n;i ++) {
printf ("%s %d %d\n",buf[i].name,buf[i].age,buf[i].score);
}
}
return 0;
}
由于已经指明了结构体的小于运算符,计算机便知道了该结构体的定序规则
(sort 函数只利用小于运算符来定序,小者在前)。于是,我们在调用 sort 时,
便不必特别指明排序规则(即不使用第三个参数),只需说明排序起始位置和结
束位置即可。虽然,该方法与定义 cmp 函数的方法类似,我个人还是建议使用
第二种方法。这样,首先可以对重载算符的写法有一定的了解;其次,在今后使
用标准模板库时,该写法也有一定的用处。后文中,将会广泛使用该方法编写例
程。若读者坚持使用定义 cmp 函数的写法,只需自行将重载小于运算符中的语
句转化为定义 cmp 函数函数体的相关语句即可,并在调用 sort 函数时加上第三
个参数 cmp。
相信通过本节的学习与练习,读者不会再对排序问题感到恐惧。有了 sort
函数,你所需要做的只是按照题面要求为其定义不同的排序规则即可。
练习题:特殊排序(九度教程第 3 题);EXCEL 排序(九度教程第 4 题);字符
串内排序(九度教程第 5 题);
二 日期类问题
关于日期运算的各种问题,同样被频繁选入机试考题当中。但是这类问题都
有规律可循。只要把握住这类问题的核心,解决这类问题就不会再有太大的难度。
例 2.3 日期差值 (九度教程第 6 题)
时间限制:1 秒 内存限制:32 兆 特殊判题:否
题目描述:
有两个日期,求两个日期之间的天数,如果两个日期是连续的我们规定他们
之间的天数为两天
输入:
有多组数据,每组数据有两行,分别表示两个日期,形式为 YYYYMMDD
输出:
每组数据输出一行,即日期差值
样例输入:
20110412
20110422
样例输出:
11
来源:
2009 年上海交通大学计算机研究生机试真题
该例题考察了日期类问题中最基本的问题——求两个日期间的天数差,即求
分别以两个特定日期为界的日期区间的长度。这里值得一提的是,解决这类区间
问题有一个统一的思想——把原区间问题统一到起点确定的区间问题上去。在该
例中,我们不妨把问题统一到特定日期与一个原点时间(如 0000 年 1 月 1 日)
的天数差,当要求两个特定的日期之间的天数差时,我们只要将它们与原点日期
的天数差相减,便能得到这两个特定日期之间的天数差(必要时加绝对值)。这
样做有一个巨大的好处——预处理。我们可以在程序真正开始处理输入数据之
前,预处理出所有日期与原点日期之间的天数差并保存起来。当数据真正开始输
入时,我们只需要用 O(1)的时间复杂度将保存的数据读出,稍加处理便能得
到答案。值得一提的是,预处理也是空间换时间的重要手段(保存预处理所得数
据所需的内存来换取实时处理所需要的时间消耗)。
另外,日期类问题有一个特别需要注意的要点——闰年,每逢闰年 2 月将会
有 29 天,这对我们计算天数势必会产生重大的影响。这里,我们必须明确闰年
的判断规则——当年数不能被 100 整除时若其能被 4 整除则为闰年,或者其能被
400 整除时也是闰年。用逻辑语言表达出来即为 Year % 100 != 0 && Year %
4 == 0 || Year % 400 == 0,当逻辑表达式为 true 时,其为闰年;反之则
不是闰年。从中我们也可以看出,闰年并不严格的按照四年一次的规律出现,在
某种情况下也可能出现两个相邻闰年相隔八年的情况(如 1896 年与 1904 年)。
所以,这里我们推荐严格按照上述表达式来判断某一年是否是闰年,而不采用某
一个闰年后第四年又是闰年的规则。。
代码 2.6
#include <stdio.h>
#define ISYEAP(x) x % 100 != 0 && x % 4 == 0 || x % 400 == 0 ? 1 : 0
// 定义宏判断是否是闰年,方便计算每月天数
int dayOfMonth[13][2] = {
0,0,
31,31,
28,29,
31,31,
30,30,
31,31,
30,30,
31,31,
31,31,
30,30,
31,31,
30,30,
31,31
}; //预存每月的天数,注意二月配合宏定义作特殊处理
struct Date { //日期类,方便日期的推移
int Day;
int Month;
int Year;
void nextDay() { //计算下一天的日期
Day ++;
if (Day > dayOfMonth[Month][ ISYEAP(Year) ]) { //若日数超过了当月最大
日数
Day = 1;
Month ++; //进入下一月
if (Month > 12) { //月数超过12
Month = 1;
Year ++; //进入下一年
}
}
}
};
int buf[5001][13][32]; //保存预处理的天数
int Abs(int x) { //求绝对值
return x < 0 ? -x : x;
}
剩余228页未读,继续阅读
捡起一束光
- 粉丝: 6w+
- 资源: 11
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- JDK 17 Linux版本压缩包解压与安装指南
- C++/Qt飞行模拟器教员控制台系统源码发布
- TensorFlow深度学习实践:CNN在MNIST数据集上的应用
- 鸿蒙驱动HCIA资料整理-培训教材与开发者指南
- 凯撒Java版SaaS OA协同办公软件v2.0特性解析
- AutoCAD二次开发中文指南下载 - C#编程深入解析
- C语言冒泡排序算法实现详解
- Pointofix截屏:轻松实现高效截图体验
- Matlab实现SVM数据分类与预测教程
- 基于JSP+SQL的网站流量统计管理系统设计与实现
- C语言实现删除字符中重复项的方法与技巧
- e-sqlcipher.dll动态链接库的作用与应用
- 浙江工业大学自考网站开发与继续教育官网模板设计
- STM32 103C8T6 OLED 显示程序实现指南
- 高效压缩技术:删除重复字符压缩包
- JSP+SQL智能交通管理系统:违章处理与交通效率提升
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功