vb中mschart利用数组作图_选考VB算法解析之2019年4月高考真题卷第17题
在对数组排序时,我们常把数组分成已排序区域和待排序区域,并使用左右边界来划分待排序区域的范围;对分查找时我们也引入了左右边界的概念。可见左右边界在数组中是一个非常重要的概念,它在分段处理数组时可以帮助我们清晰地描述某个区间的数组元素,从而正确理解相关处理过程。
2019年4月信息技术选考真题卷第17题
一题目
17.【加试题】给定m个区间和1个数组(有n个元素),现要求根据各区间限定的取值范围,将数组依次分隔成m+1个段。具体分割方法如下:
第1段是从数组首个元素开始、元素值都属于第1区间的最长连续元素段。如果首个元素不属于第1区间,则第1段元素个数为0;
第1段分割后的剩余元素,用同样的方法来依次分割第2段、第3段、…、第m段;
第m段分割后的剩余元素分割到第m+1段(剩余段)。
若第p(1≤p≤m-1)段末尾连续元素的值也同时属于第p+1区间,则这块连续元素称为第p段“重叠块”,该段其余部分称为第p段“非重叠块”。由于不存在第m+1区间,这里特别规定:第m段的全部元素都分割到m段“非重叠块”,第m段“重叠块”的元素个数为0,一个数组分段示例如下图。图中数组第1个元素10不属于第1区间[0,5],因此第1段的元素个数为0。10和20属于第2区间,而33不属于第2区间,因此第2段只包含10和20两个元素。第3段末尾连续3个元素的值也同时属于第4区间,因此,第3段“非重叠块”包含33,58,46,第3段“重叠块”包含55,62,69。
(1)给定2个区间依次为[10,50]、[30,80],数组各元素为“12,44,34,45,66,50,45,70”,则第1段“重叠块”中的元素个数为 个。
(2)小李根据上述描述,设计了一个统计各段“非重叠块”、“重叠块”和剩余段中元素个数的算法。算法的VB程序如下,请在划线处填入合适的代码。
Const n = 18, m = 6
Dim a(1 To n) As Integer
Dim b(1 To 2 * m) As Integer
'b(1)、b(2)为第1区间的下限和上限, b(3)、b(4)为第2区间的下限和上限,…
Dim c(1 To 2 * m + 1) As Integer
'数组c用于保存统计结果:
'c(1)、c(2)分别存储第1段“非重叠块”和“重叠块”的元素个数,
'c(3)、c(4)分别存储第2段“非重叠块”和“重叠块”的元素个数,…
'c(2m-1)存储第m段"非重叠块"元素个数,c(2m)存储第m段"重叠块"元素个数(值为0)
'c(2m+1)存储剩余段元素个数
Private Sub Command1_Click()
Dim i As Integer, p As Integer, L As Integer, LL As Integer
'读取n个数据并保存在数组a中,代码略
'读取m个区间的下限和上限并保存在数组b中,代码略
For i = 1 To 2 * m + 1
c(i) = 0
Next i
i = 1: p = 1
L = 0: LL = 0
Do While ①
If IsIn(i, p) Then
If IsIn(i, p + 1) Then
LL = LL + 1
Else
②
LL = 0
End If
i = i + 1
Else
c(2 * p - 1) = L
c(2 * p) = LL
L = 0: LL = 0
p = p + 1
End If
Loop
If i <= n Then
c(2 * p - 1) = n - i + 1
Else
c(2 * p - 1) = L
c(2 * p) = LL
End If
'输出统计结果,代码略
End Sub
'函数IsIn用来判断a(i)值是否属于第p区间
Function IsIn(i As Integer, p As Integer) As Boolean
If p > m Then
IsIn = False
Else
If ③ Then IsIn = True Else IsIn = False
End If
End Function
二考查知识点数组分段处理、子序列左右边界的概念、自定义函数功能分析。要求学生熟练掌握数组的基本操作,能根据题意分析各个变量的含义,能用左右边界的概念来划分子序列的范围,并熟悉自定义函数的语法。三解析此题背景信息繁复,数据结构复杂,涉及变量较多,很考验学生的阅读理解能力。但算法说明清晰,示例数据也很恰当,如果有足够时间,应该不难理解题意,尤其是第3空,根据题目说明和注释信息,不难填出此空。我们先采用在代码中添加注释的方法解析算法如下:
题目中的代码分别用变量L和LL来表示第p段元素中“非重叠块”和“重叠块”的元素个数,只使用一重循环,通过遍历数组a,判断a(i)是否属于第p段元素,利用一个嵌套If语句,分别计算出L和LL的值。其中LL递增和清零的表达式容易理解,但L的计算式有一定难度,容易错填为L = L + 1,若是这样,则L的含义变成了统计第p段中属于区间p但不属于区间p+1的元素数量。
因为“重叠块”的特征是第p段末尾的连续元素,故一旦出现不属于区间p+1的元素,则LL必须归零,同时把前面累积的LL值累加到L上,即L = L + LL + 1。
我们可以从另一个角度来理解题意:因为第p段元素的总数量是“非重叠块”和“重叠块”的元素个数之和,如果我们能够把第p段元素的长度(即元素总量)求出来,再减去LL,就得到了“非重叠块”的元素个数。
此外,我们还可以把处理第p段元素的过程放在一个内层do循环中,这样便于理解LL的计算过程,而且代码更简洁。
为了充分利用题目的原有代码,我们只修改了核心代码,且未定义新的变量,但是变量L不再表示“非重叠块”的长度,而是指向第p段元素的左边界,然后使用变量i来遍历数组a,使得在内层do循环结束后(i-1)刚好指向第p段元素的右边界,这样第p段元素的长度恰好为i-L,若用LL表示“重叠块”的长度,则“非重叠块”的长度为i-L-LL。
相关代码如下:
四答案
(1) 3
(2) ① i<=n And p<=m 或其他等价表达式
② L=L+LL+1或其他等价语句
③a(i)>=b(2*p-1) And a(i)<=b(2*p) 或其他等价表达式五拓展思考
本题给出的“重叠块”概念很有趣,在很多地方都有应用,“字符串消消乐”游戏就是一例。
“字符串消消乐”游戏说明:从Text1框输入一个字符串,程序会把相邻的相同字符消除,所有相邻的相同字符被消除后剩余字符会重新拼接成新的字符串,再按照相同的规则消除字符,直到所有相邻的字符都不相同或变成空串为止,输出最后获得的字符串。
例如,输入字符串"aabcdddcd",点击“运行”按钮后输出字符串"bd";输入字符串"aabdcdddcdb",点击“运行”按钮后输出空字符串;输入字符串"aabccbbbca",点击“运行”按钮后输出字符串"bca"。
算法的VB程序如下,请在划线处填入合适的代码。
参考代码1:
Private Sub Command1_Click()
Dim s1 As String, s2 As String
Dim i As Integer, j As Integer
s1 = Text1.Text
Do While Len(s1) > 1
s2 = ""
i = ①
Do While i <= Len(s1) '消除相邻的相同字符
For j = i + 1 To Len(s1)
If Mid(s1, i, 1) <> Mid(s1, j, 1) Then ②
Next j
If j = i + 1 Then s2 = ③
i = ④
Loop
If s2 = s1 Then ⑤ '没有发生消除操作,跳出循环
s1 = s2 '重复消除过程,直到无法消除为止
Loop
Label2.Caption = s1
End Sub
参考代码2:
Private Sub Command2_Click()
Dim s1 As String, s2 As String, ch As String
Dim i As Integer, flag As Boolean
s1 = Text1.Text
flag = True
Do While flag And Len(s1) > 1
flag = ⑥ '默认没有消除字符
'单独处理第一个字符
If Mid(s1, 1, 1) = Mid(s1, 2, 1) Then s2 = "" Else s2 = Mid(s1, 1, 1)
For i = 2 To Len(s1) '最后一个字符无需单独处理,想想为什么?
ch = Mid(s1, i, 1)
If ⑦ Then
flag = True '发生了消除操作
Else
s2 = ⑧
End If
Next i
s1 = s2 '重复消除过程,直到无法消除为止
Loop
Label2.Caption = s1
End Sub
六拓展思考答案
① 1 ② Exit For
③ s2 + Mid(s1, i, 1)
④ j ⑤ Exit Do
⑥ False
⑦ ch = Mid(s1, i - 1, 1) Or ch = Mid(s1, i + 1, 1)
⑧ s2 + ch
写在后面
为了保证解析的原创性和思维的独特性,我都是独立解题后,先不看答案(除非题目不会做),直接把解析写好,再去看答案。
当然,如果发现参考答案有更好的思路,我还是很乐于学习和借鉴的。同时,由于本人水平有限,解析中难免出现疏漏甚至错误之处,敬请谅解。
无论是赞同还是反对我的看法,都请你给我留言。如果你有新的想法,千万不要憋在心里,请发出来大家一起讨论。让我们相互学习,共同进步!
需要本文word版的,可以加入“选考VB算法解析”知识星球参与讨论和下载文件,“选考VB算法解析”知识星球汇集了数量众多的同好,更多有趣的话题在这里讨论,更多有用的资料在这里分享。
我们专注选考VB算法,感兴趣就一起来!
相关优秀文章:
阅读代码和写更好的代码
最有效的学习方式
选考VB算法解析之2018年11月高考真题卷第16题
选考VB算法解析之2018年11月高考真题卷第17题
选考VB算法解析之2019年4月高考真题卷第16题
vb中mschart利用数组作图_选考VB算法解析之2019年4月高考真题卷第17题相关推荐
- if嵌套while循环语句_选考VB算法专题系列讲座13嵌套If和多分支语句
视频内容: 本视频是给学生复习If语句时的授课内容,长长的寒假过后,很多学生连最基本的东西的忘记了,只好从最简单的开始复习.本视频讲解了使用嵌套If和多分支语句解决的两个问题,讲解非常详细,基础不够扎 ...
- 命令行参数在VB中的利用
分享到 一键分享 QQ空间 新浪微博 百度云收藏 人人网 腾讯微博 百度相册 开心网 腾讯朋友 百度贴吧 豆瓣网 搜狐微博 百度新首页 QQ好友 和讯微博 更多... 百度分享 相册 广场 游戏 kf ...
- 中希尔排序例题代码_【数据结构与算法】这或许是东半球分析十大排序算法最好的一篇文章...
码农有道 历史文章目录(请戳我) 关于码农有道(请戳我) 前言 本文全长 14237 字,配有 70 张图片和动画,和你一起一步步看懂排序算法的运行过程. 预计阅读时间 47 分钟,强烈建议先收藏然后 ...
- 计算机vb中的缺省是什么意思,在VB中说的缺省按纽是不是就是默认按纽的意 – 手机爱问...
2006-04-18 在VB中的按纽命令中,如何写入格式化命令,是什么代码? 用VB格式化硬盘: 在新建工程中添加表单一个:命令按钮一个为CmdFormatDisk:驱动器列表控件一个为Drive1 ...
- vb中多个串口通讯_串口服务器的原理及应用!
串口服务器是将来自TCP/IP协议的数据包,解析为串口数据流:反之,也可以将串口数据流打成TCP/IP协议的数据包,从而实现数据的网络传输. 它能多个串口设备连接并能将串口数据流进行选择和处理,把现有 ...
- java中怎么判断数组下标越界_初学java遇到疑惑,数组下标越界,求解答!
一个学生考试成绩录入程序的模块化设计,在编译时出现了数组下标越界 错误提示:Exception in thread "main" java.lang.ArrayIndexOutOf ...
- c++排序数组下标_看动画学算法之:排序 - 基数排序
简介 之前的文章我们讲了count排序,但是count排序有个限制,因为count数组是有限的,如果数组中的元素范围过大,使用count排序是不现实的,其时间复杂度会膨胀. 而解决大范围的元素排序的办 ...
- c++ 二维数组 排序_漫画:“排序算法” 大总结
冒泡排序: 漫画:什么是冒泡排序?mp.weixin.qq.com 选择排序: 漫画:什么是选择排序?mp.weixin.qq.com 插入排序: 漫画:什么是插入排序?mp.weixin.q ...
- java中gso是什么意思_在java中用gson解析json
我试图解析this json并从中创建一个POJO.在线文档让我感到困惑.我怀疑我错误地处理了同一类型的对象有许多不同的事件.我需要一个数组吗?那将是什么样子?到目前为止,我的课程是: public ...
最新文章
- 宏基因组扩增子最新分析流程QIIME2:官方中文帮助文档
- NSNotificationCenter
- ------ 比较二位数组大小-----
- Mysql中怎样设置指定ip远程访问连接
- VTK:vtkAnimationScene用法实战
- 微信 SQLite 数据库修复实践
- 拿到两封信,开心ING
- 敌兵布阵 HDU - 1166 (线段树)
- CometD:Java Web应用程序的Facebook类似聊天
- modal vue 关闭_Vue弹出框的优雅实践
- scp选择二进制_二进制传输与文本传输区别
- android 的wifi定位
- 期待已久!iPhone 13将使用带LTPO技术的OLED屏幕
- WordPress解决上传文件大小限制问题
- php快速排序空间复杂度,PHP 算法基础----时间复杂度和空间复杂度(转载)
- 粒子群PSO算法实验及其代码解释
- JS高级程序设计(10)
- linux 代码编辑器软件下载,Visual Studio Code下载
- 阿里云 echarts地图json生成器 精确到区县。
- 数字图像处理的技术方法和应用