1 / 34

第五章 基础题目选解

第五章 基础题目选解. 09 计算机 黎明明. 学习目标:. 1 、学会用常量表简化代码 2 、学会用状态变量辅助字符串读入 3 、学会用结构体定义高精度整数,并设计构造函数、复制构造函数和输入输出办法。 4 、学会为结构体定义“小于”运算符,并用它定义其他比较运算符 5 、掌握冒泡排序和顺序检索. 学习目标:. 6 、熟练掌握用 qsort 库函数给整数和字符串排序的方法。 7 、熟练掌握小规模素数表的构造方法 8 、熟练掌握素因子分解的办法。 9 、熟练掌握三角形有向面积的意义和计算办法 10 、完成一定数目的习题。.

Télécharger la présentation

第五章 基础题目选解

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 第五章 基础题目选解 09计算机黎明明

  2. 学习目标: 1、学会用常量表简化代码 2、学会用状态变量辅助字符串读入 3、学会用结构体定义高精度整数,并设计构造函数、复制构造函数和输入输出办法。 4、学会为结构体定义“小于”运算符,并用它定义其他比较运算符 5、掌握冒泡排序和顺序检索

  3. 学习目标: 6、熟练掌握用qsort库函数给整数和字符串排序的方法。 7、熟练掌握小规模素数表的构造方法 8、熟练掌握素因子分解的办法。 9、熟练掌握三角形有向面积的意义和计算办法 10、完成一定数目的习题。

  4. 在算法比赛中,编程能力非常重要。算法设计得再好,如果不能在很短的时间里面实现出来也是白搭。这一章就是通过一些习题,让大家对一些小的编程技巧有所了解。为后面一些复杂的算法打基础。在算法比赛中,编程能力非常重要。算法设计得再好,如果不能在很短的时间里面实现出来也是白搭。这一章就是通过一些习题,让大家对一些小的编程技巧有所了解。为后面一些复杂的算法打基础。

  5. 5.1 字符串 纯字符串的容易题大多数都是一看就知道怎么做,虽然思路简单但是实现却比较繁琐,如果不用一些小技巧来简化,那么代码量就会很大,而且很容易出小错误。

  6. 习题1: 输入一个错位后敲出的字符串,输出打字员本来想打出的句子。

  7. 如何做到题目要求的输入一个字符串?

  8. 主要输入库函数: 一次输入一个字符: scanf("<格式化字符串>",<地址表>); getchar() getch 一次输入一个字符数组: scanf("<格式化字符串>",<地址表>); gets() C++ cin

  9. 1、更广义的常量 2、转义 3、多种解法,代码长度不一样 4、可以尝试C++里面的string

  10. 习题2: TeX括号 在Tex中,左括号是``,右括号是’’。输入一篇包含双引号的文章,你的任务是把它转化为TeX格式

  11. 习题3: 周期串 如果一个字符串可以由某个长度为K的字符串重复多次得到,我们就说该串以K为周期。例如,abcabcabcabc以3位周期(注意,它也是以6和12为周期)。输入一个长度不超过80的穿,输入它的最小周期。 样例输入: HoHoHo 样例输入: 2

  12. 5.2 高精度 在介绍C语言时,大家已经看到很多整数溢出的情形。如果计算的结果真的很大,需要用所谓的高精度算法,用数组来存储整型,模拟手算的方法进行四则计算。

  13. 习题4: 小学生算术 很多学生在学习加法时,发现“进位”特别容易出错。你的任务是计算两个整数的相加时需要多少次进位。你编制的程序应当可以处理连续多组数据,直到读到两个0(这是输入标记结束)。假设输入的整数都不超过9个数字。

  14. 习题5 阶乘的精确值 输入不超过1000的正整数n,输n!=1*2*3…n的精确解。

  15. 习题6: 实现高精度类

  16. 5.3 排序与检索 数据处理室计算机的强项,包括排序,检索统计等。这里举一些经典的例子。

  17. 习题7: 6174问题 假设你有一个各位数字互不相同的四位数,把所有 数字从大到小排列后得到a,从小到大排序后得到b,然后用a-b替换原来的数,并且继续操作,直到回到自己。

  18. 冒泡排序思想: 设想被排序的数组R[1..N]垂直竖立,将每个数据元素看作有重量的气泡,根据轻气泡不能在重气泡之下的原则,从下往上扫描数组R,凡扫描到违反本原则的轻气泡,就使其向上"漂浮",如此反复进行,直至最后任何两个气泡都是轻者在上,重者在下为止。

  19. 主要的排序办法: 冒泡排序 快速排序 堆排序 合并排序 插入排序 桶排序 基数排序 希尔排序

  20. 快速排序 快速排序是竞赛中经常需要使用的算法,特别是高中的信息学比赛,可以说快速排序算法是必须非常熟悉的。而ACM中可以使用C,C++函数,qsort和sort函数。直接调用即可排序,所以不少同学估计都没有自己写过快速排序的代码。 而快排里面使用的分治思想很实用。 快排思路: 1.选取一个元素X作为某段数据的标识,让比X小的都排在左边,比X大的都排在右边。 2.递归的进行第1步,直到所有数据都排好序。

  21. 堆排序 堆排序需要维护的堆的性质要满足: 1.是一棵二叉树,而且是完全二叉树(除了最后一层都是满的,最后一层先把左边填满) 2.如果是最大堆,要保证父节点的值大于两个子节点的值。(最小堆同理) 二叉树的数据结构是用数组来表示的,完全二叉树的性质有 父节点坐标*2 = 左儿子坐标, 父节点坐标*2 + 1 = 右儿子坐标。 流程: 1.建立一个最大堆,让数组满足堆的性质。 2.每次取出堆顶的最大值,放到堆尾,并将堆的大小减去1,直到剩下一个元素不用排序为止。

  22. 习题8: 字母重排 输入一个字典(用******结尾),然后再输入若干单词。每输入一个单词w,你都需要在字典中找出所有可以用w的字母重新排后得到的单词,并按照字母字典序从小到大的顺序在一行中输出(如果不存在,输出:()。输入单词之间用空格和空行隔开,且所有输入单词都由不超过6个小写字母组成。注意,字典中的单词不一定按字典序排列。

  23. qsort七种排序方法

  24. 一、对int类型数组排序 int num[100]; Sample: int cmp ( const void *a , const void *b ){return *(int *)a - *(int *)b;} qsort(num,100,sizeof(num[0]),cmp);

  25. 二、对char类型数组排序(同int类型) char word[100]; Sample: int cmp( const void *a , const void *b ){return *(char *)a - *(int *)b;} qsort(word,100,sizeof(word[0]),cmp);

  26. 三、对double类型数组排序(特别要注意) double in[100]; int cmp( const void *a , const void *b ){return *(double *)a > *(double *)b ? 1 : -1;} qsort(in,100,sizeof(in[0]),cmp);

  27. 四、对结构体一级排序 struct In{ double data; int other;}s[100] //按照data的值从小到大将结构体排序,关于结构体内的排序关键数据data的类型可以很多种,参考上面的例子写 int cmp( const void *a ,const void *b){return (*(In *)a)->data > (*(In *)b)->data ? 1 : -1;} qsort(s,100,sizeof(s[0]),cmp);

  28. 五、对结构体二级排序 struct In{ int x; int y;}s[100]; //按照x从小到大排序,当x相等时按照y从大到小排序 int cmp( const void *a , const void *b ){struct In *c = (In *)a;struct In *d = (In *)b;if(c->x != d->x) return c->x - d->x;else return d->y - c->y;} qsort(s,100,sizeof(s[0]),cmp);

  29. 六、对字符串进行排序 struct In{ int data; char str[100];}s[100]; //按照结构体中字符串str的字典顺序排序 int cmp ( const void *a , const void *b ){return strcmp( (*(In *)a)->str , (*(In *)b)->str );} qsort(s,100,sizeof(s[0]),cmp);

  30. qsort 头文件为 #include <stdlib.h> sort 头文件为 #include <algorithm> sort 调用格式 sort(a,a+n,cmp); sort 更好用

  31. 检索 常用的就是遍历和二分检索

  32. 二分检索 二分查找法,它充分利用了元素间的次序关系,采用分治策略,可在最坏的情况下用O(log n)完成搜索任务。它的基本思想是,将n个元素分成个数大致相同的两半,取a[n/2]与欲查找的x作比较,如果x=a[n/2]则找到x,算法终止。如果x<a[n/2],则我们只要在数组a的左半部继续搜索x(这里假设数组元素呈升序排列)。如果x>a[n/2],则我们只要在数组a的右半部继续搜索x。

  33. 5.4 数学基础 明天有队友讲这一节

  34. 5.5 在线评测 BOJ POJ

More Related