日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

vb中mschart利用数组作图_选考VB算法解析之2019年4月高考真题卷第17题

發布時間:2024/10/14 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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题的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。