- 1、本文档共22页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
实验五、数组2.ppt
实验五、数组2 例子要点分析 1001 输入10个大小不同的整数,将它们从小到大排序后输出,并给出现每个元素在原来序列中的位置。 样例输入 1 2 3 5 4 6 8 9 10 7 样例输出 1 2 3 4 5 6 7 8 9 10 1 2 3 5 4 6 10 7 8 9 1001 题意分析 1 2 3 4 5 6 7 8 9 10 1 2 3 5 4 6 8 9 10 7 1 2 3 5 4 6 10 7 8 9 解决思路 (1)将a数组复制到b数组,并对b数组使用冒泡法排序。 (2)遍历b数组中的每个元素b[i],求出其在数组中的位置,两重循环搞定! 1002 典型的约瑟夫问题:n个人围成一个圈,顺时针从1开始数到m,数到m的人出局,剩下的人继续游戏,直到最后一个,问最后一个是谁? 样例输入 5 3 样例输出 4 1002样例分析 1 2 3 4 5 1 2 4 5 2 4 5 2 4 4 N=5(人数),m=3(数到多少) 关键问题1:找到出局的人 设s为起点,出局的人数组下标为e=s+m-1 a[0] a[1] a[2] a[3] a[4] s=1 e=4 但如果e=n?e=n实际上应该是e=0 因此出局的人数组下标为e=(s+m-1)%n 关键问题2:如何出局 一种办法:直接删除a[e],即从下标e开始,后面的元素不断覆盖前面的元素; 最后元素个数减1 1 2 3 4 5 e=2 1 2 a[0] a[1] a[2] a[3] a[4] 1003思路 找出具有m行n列二维数组Array的“鞍点”,即该位置上的元素在该行上最大,在该列上最小,其中1=m,n=10。 思路:先在行上找最大值,假设最大值所在行和列r1和c1,再在该列找最小值,假设所在行和列为r2和c2,如果r1==r2并且c1==c2,那么就是解! 1004 已知元素从小到大排列的两个数组x[]和y[],请写出一个程序算出两个数组彼此之间差的绝对值中最小的一个,这叫做数组距离。 样例输入 5 5 1 2 3 4 5 6 7 8 9 10 样例输出 1 1004思路 方法1:两两组合全部求绝对值取最小值,效率较低; 方法2:查看样例数据发现,1和6求解后,1和7,8,9,10就没必要求了,因为绝对值越来越大了。下一步只要2和6求。 5 5 1 2 3 4 5 6 7 8 9 10 因此算法思路: (1)如果a[i]b[j],则i++; (2)如果a[i]==b[j],跳出循环,答案为0 (3)如果a[i]b[j],则j++; 直到有一个数组遍历完成。 1005思路 输入一个十进制数N,将它转换成R进制数输出。 思路:不断取N%R,并令N=N/R,结果存入数组,再从数组尾部开始输出。 注意: N%R=10时用字母表示,10~15对应’A’~’F’,即N%R-10+’A’。 负数处理:输出负号后转为正数处理 0要特别处理 1006思路 N为正整数,计算从1到N的所有整数中包含数字1的个数。比如,N=10,从1,2...10,包含有2个数字1。 思路:判断N%10是否为1并计数; 注意:应该使用数组存储计算后的值,如a[i]表示1到i中1的个数,那么a[i+1]可以根据a[i]快速计算得到,从而提高效率。 1007思路 0,1,2,……,L上都有树,现在给定一些区间砍掉,问最后还剩下几棵树。 思路:用a[i]表示坐标i是否有树,一开始均为0,表示都有树,每砍一区间,就将该区间的所有值都改为1。最后0的个数就是树的棵树。 1008思路 题目意思是找一条最长d路径,求出长度 方法1:自底向上,每次都将最大的值加到上一行中,最后a[0][0]就是答案 方法2:自顶向下,使用dp[i][j]表示从0到a[i][j]之间的最长路径,那么:dp[i+1][j]可以根据dp[i][j]和dp[i][j+1]得到。最后求dp数组最后一行的最大值。 1009思路 意思是找出离s最近的d。 先找出s的坐标(si,sj),设min为一个较大的数(求最小值总是假设一开始很大),然后再遍历二维数组,碰到d便求它与s的距离,如果更小便更新最小值,同时记录坐标。 4 5 ..d.. ...s. d...d ...d. 1010思路 给定两个很大的数,判断是否相等。 思路:数很大,需要字符数组存储,先将每个数作以下处理: (1)查看是否有小数点,没有不用处理,如果有,则从尾部开始找非0值,如果找到,则去除尾部0,如果没有找到非0值,将小数点及之后的所有值都去掉。 (2)去掉只要将非0后的字符改成’\0’即可。 “123.040000”-“123.04\0000” 1011思路 很简单,倒着输出就好了! 1012思路 意思:给出一个字符串,从里面能找出多少个子串,不能重复使用字符 如: abc
文档评论(0)