中文字幕精品无码一区二区,成全视频在线播放观看方法,大伊人青草狠狠久久,亚洲一区影音先锋色资源

2020浙江高考信息技術(shù)VB算法與程序?qū)m?xiàng)練習(xí)專題三 算法的綜合運(yùn)用

資源下載
  1. 二一教育資源

2020浙江高考信息技術(shù)VB算法與程序?qū)m?xiàng)練習(xí)專題三 算法的綜合運(yùn)用

資源簡(jiǎn)介

專題三 算法的綜合運(yùn)用
1.幸運(yùn)數(shù)。一組由1開始的奇數(shù)數(shù)列為:1,3,5,7,9,11,13,15,17,19,21,23,25,……此數(shù)列的第二項(xiàng)為3,將此數(shù)列的第3n個(gè)數(shù)刪除,留下的數(shù)為:1,3,7,9,13,15,19,21,25,……,新數(shù)列的第三項(xiàng)為7,將新數(shù)列的第7n個(gè)數(shù)刪除,留下的數(shù)為:1,3,7,9,13,15,21,25,……,若一直重復(fù)上述步驟,最后剩下的數(shù)就是幸運(yùn)數(shù):
1,3,7,9,13, 15, 21, 25, 31, 33, 37, 43, 49, 51,……
下列程序的功能是找出1000以內(nèi)的幸運(yùn)數(shù),但加框處代碼有錯(cuò),請(qǐng)改正。
Private Sub Command1_Click()
Dim a(500) As Integer, b(500) As Integer
Dim i As Integer, m As Integer, k As Integer
Dim top As Integer, bott As Integer
′產(chǎn)生由1開始的奇數(shù)數(shù)列,依次存儲(chǔ)在數(shù)組a中,代碼略
top=2: bott=500
Do While top         ′(1)
For i=1 To bott
If i Mod a(top) <>0 Then
   b(k) =a(i)
   k=k+1
End If
 Next i
    ′(2)
 top=top+1
 For i=1 To bott
   a(i) =b(i)
 Next i
Loop
For i=1 To bott
Listl.AddItem Str(a(i))
Next i
End Sub
解析 a數(shù)組每次都在更新,因此b數(shù)組的下標(biāo)每次總是從1開始。每一遍下來,數(shù)組中總是要減少k-1個(gè)數(shù)。
答案 (1)K=1 (2)bott=k-1
2.如圖所示加密程序:在文本框Text1中輸入明文,單擊命令按鈕“加密”,在文本框Text2中輸出密文。加密算法思路如下:

1)只針對(duì)英文字符和數(shù)字進(jìn)行加密,其余字符不變;
2)將原文中的小寫字母轉(zhuǎn)換為大寫字母;
3)根據(jù)第2步所得結(jié)果,若是英文字符,則逐個(gè)后移4位(例如:A→E,Z→D),若是數(shù)字,則逐個(gè)前移2位(例如:3→1,1→9)。
綜上所述:原文為Jim is at room 4!,加密后輸出密文為:NMQ MW EX VSSQ 2!
(1)程序代碼如下,請(qǐng)?zhí)羁铡?br/>Private Sub Command1_Click()
Dim str1 As String, str2 As String, ch As String
Dim i As Integer, j As Integer, n As Integer
str1 = Text1.Text: str2 = ” ”: n = Len(Text1.Text)
For i = 1 To n
ch = Mid(str1, i, 1)
If ch >= ”a” And ch <= ”z” Then
   ______①______
End If
If ch >= ”A” And ch <= ”Z” Then
ch = Chr((Asc(ch) - Asc(”A”) + 4) Mod 26 + Asc(”A”))
ElseIf ch >= ”0” And ch <= ”9” Then
ch=Chr((__②______ ) Mod 10+Asc(”0”)) ′
End If
str2 = str2 + ch
Next i
Text2.Text = str2
End Sub
(2)若在Text1中輸入的明文為:Num 15*,則程序運(yùn)行后在Text2中輸出的密文為:____________________________________________________________________。
解析 當(dāng)ch是小寫字母時(shí)轉(zhuǎn)大寫字母,大寫字母ASCII值比小寫小32。數(shù)字從0至9,構(gòu)成一個(gè)環(huán),因此先利用ASC函數(shù)把ch轉(zhuǎn)0-9的數(shù)字,前移是-2,但可能會(huì)出現(xiàn)負(fù)數(shù)那只能加10。
答案 (1)①ch = Chr((Asc(ch) - 32)) ②Asc(ch)-Asc(”0”)-2+10 或Val(ch)+8 (2)RYQ 93*
3.使用VB程序研究“回文素?cái)?shù)在素?cái)?shù)表中的位置”,程序運(yùn)行界面如下圖所示。程序?qū)?0000以內(nèi)的全部素?cái)?shù)按順序保存到數(shù)組a中,在文本框中輸入需要查找的回文數(shù),單擊“查找”按鈕Command1,在標(biāo)簽Label1中顯示該回文素?cái)?shù)在全部素?cái)?shù)中的位置。

實(shí)現(xiàn)上述功能的程序如下,加框處的代碼有錯(cuò),請(qǐng)改正。
Dim a(1 To 10000) As Integer
Dim n As Integer
Private Sub Form_Load()
′將1000以內(nèi)的素?cái)?shù)從小到大依次存入數(shù)組a中
′將素?cái)?shù)的個(gè)數(shù)存入變量n中
End Sub
Private Sub Command1_Click()
Dim i As Integer, j As Integer, mid As Integer
Dim key As Integer, flag As Boolean
key = Val(Text1.Text)
If key > 10000 Or Not hws(key) Then
 MsgBox ”輸入的數(shù)據(jù)不是10000以內(nèi)的回文數(shù)”
Else
i=1:j=n
 flag = False
 Do While   ′(1)
    mid = (i + j) \2
    If key > a(mid) Then
      i = mid + 1
    ElseIf key < a(mid) Then
      j = mid - 1
    Else
      flag = True
    End If
 Loop
 If Not flag Then
Label1.Caption = ”該回文數(shù)不是素?cái)?shù)”
 Else
Label1.Caption=”回文素?cái)?shù)”+Str(key)+”是第”+Str(mid)+”個(gè)素?cái)?shù)”
  End If
End If
End Sub
 ′自定義函數(shù) hws(y)用于判斷y是否是回文數(shù)
 Function hws(y As Integer) As Boolean
Dim x As Integer, k As Integer
x = 0: k = y
hws = True
Do While k > 0
    ′(2)
   k = k \10
Loop
If x <> y Then hws = False
End Function
解析 本題考查對(duì)分查找算法及其他算法。二分查找結(jié)束的條件,還有查找范圍或者還沒找到。自定義函數(shù)hws用于判斷y是否是回文數(shù),將十位數(shù)中每一位取出,用對(duì)10求余,然后將其累加。
答案 (1)flag=false And i<=j(luò) (2)x=x*10+k mod 10
4.“奔跑吧,兄弟”欄目組要在全國各地挑選節(jié)目錄制的地點(diǎn)。有來自K(1<=K<=25)個(gè)不同省份的N(K<=N<=100)個(gè)地區(qū)送來了各自的競(jìng)選材料。由于參選地區(qū)太多,沒有辦法同時(shí)呈現(xiàn)所有材料供評(píng)委進(jìn)行選擇。欄目組決定選擇一段連續(xù)區(qū)間內(nèi)的參選地區(qū),這個(gè)區(qū)間內(nèi)每個(gè)省份的參選地區(qū)至少要有1個(gè),求滿足要求的最小區(qū)間長(zhǎng)度。
參選地區(qū)用數(shù)字1,2,3…N 表示,每個(gè)地區(qū)所屬的省份依次存入數(shù)組a(1)到a(N),若1號(hào)地區(qū)的省份編號(hào)是3,即a(1)=3。分析可知,所求區(qū)間的長(zhǎng)度至少為K(省份的數(shù)量),最大為N(地區(qū)的數(shù)量)。我們可以通過二分K到N 之間的數(shù)求得最小區(qū)間長(zhǎng)度。例如有10個(gè)參選地區(qū),分別來自于5個(gè)不同的省份,從左到右排列,地區(qū)編號(hào)依次2,1,2,4,3,3,5,5,3,5,則最小的一段包含所有5個(gè)地區(qū)的區(qū)間是從第2個(gè)到第7個(gè)地區(qū),區(qū)間長(zhǎng)度為6。
(1)若有12個(gè)參選地區(qū),分別來自于6個(gè)不同的省份,從左到右排列,地區(qū)編號(hào)依次為2,1,6,4,6,3,1,2,3,5,5,4則最小的區(qū)間長(zhǎng)度為 ______________。
(2)請(qǐng)?jiān)趧澗€處填入合適的代碼。
Dim a(1 To 100) As Integer, T As Integer, N As Integer
Private Sub Form_Load()
′產(chǎn)生N的值,表示地區(qū)數(shù),產(chǎn)生K的值,表示省份數(shù)
′產(chǎn)生編號(hào)為1到N 的地區(qū)的省份編號(hào),并存儲(chǔ)在數(shù)組a中
′代碼略
End Sub
Private Sub Command1_Click()
Dim M As Integer
i = K: j = n
Do While i <= j
_____①______
If bh(M) = True Then
j = M - 1
ans = M
Else
i = M + 1
End If
Loop
Text1.Text = Str(ans)
End Sub
Function bh(M As Integer) As Boolean
Dim f(1 To 25) As Integer   ′f(i)表示省份為i的地區(qū)是否包含 Dim t As Integer bh= False
For i = 1 To n - M + 1 ′枚舉以i為起點(diǎn)的M個(gè)地區(qū)中各個(gè)省份是否都包含
For j =____②____
f(a(j)) = 1
Next j
t = 0
For j = 1 To K
____③______
Next j
If t = K Then bh = True: Exit Function
For j = 1 To K
f(j) = 0
Next j
Next i
End Function
解析 滿足要求的最小區(qū)間為:4 6 3 1 2 3 5 ,區(qū)間長(zhǎng)度為 7 。M表示區(qū)間的長(zhǎng)度,最小為K,最大為N,通過二分K到N 之間的數(shù)求得最小區(qū)間長(zhǎng)度ans。
自定義函數(shù)bh(M As Integer)用來判斷長(zhǎng)度為M的區(qū)間是否能包含所有省份,循環(huán)變量i指向長(zhǎng)度為M的區(qū)間的左邊界,代碼For j = i To i + M - 1 表示遍歷該區(qū)間內(nèi)的各個(gè)地區(qū),每次遍歷該區(qū)間前先設(shè)置數(shù)組f的所有元素值均為0(題目中把該段代碼放在了內(nèi)層循環(huán)后面,實(shí)際上放在前面更好理解),若某個(gè)省份編號(hào)a(j)出現(xiàn)過,則令f(a(j)) = 1,然后用t來統(tǒng)計(jì)出現(xiàn)過的省份數(shù)量,最后判斷t是否等于K,若相等則表示包含所有省份,返回True。
注意:第③空答案也可以是:If f(j) = 1 Then t = t + 1
答案 (1)7 (2)①M(fèi) = (i + j) \2 ②i To i + M - 1
③t = t + f(j)
5.在文本框Text1中輸入待加密的n個(gè)字符(僅由ASCII碼字符構(gòu)成,最多支持960個(gè)字符),輸入后單擊加密按鈕,在文本框Text2中產(chǎn)生密文。加密方式如下:
①定義一個(gè)數(shù)組a(1to961)。產(chǎn)生一個(gè)3到6之間的隨機(jī)整數(shù)k,將十進(jìn)制數(shù)960均分成k份,字符在字符串中的位置除以k的余數(shù)決定該字符存放在第幾份數(shù)據(jù)中(余數(shù)為1保存在第一份數(shù)據(jù)中,余數(shù)為2保存在第二份數(shù)據(jù)中……,余數(shù)為0保存在第k份數(shù)據(jù)中);
②用十進(jìn)制數(shù)127減去每個(gè)字符的ASCII碼值,得到的差作為該字符的密文,并保存在數(shù)組a中,同一段內(nèi)的密文依次存放;
③將隨機(jī)產(chǎn)生的數(shù)k加64后保存在數(shù)組元素a(961)中,并一起參與加密;
④將數(shù)組a中所有有密文值的數(shù)組元素從后往前依次存放到數(shù)組b中;
⑤將數(shù)組b中的每個(gè)密文用3位數(shù)字保存,不足3位的前面用0補(bǔ)足,然后依次連接保存在變量sc中;在文本框Text2中輸出sc。
例如:
①若現(xiàn)有待加密的字符串為“zp123”,產(chǎn)生的隨機(jī)數(shù)k=3,則960分成3份,每份可存放320個(gè)值,分別為a(1)至a(320),a(321)至a(640),a(641)至a(960);
②由于Asc(“z”)=122,則127-122=5。字符“z”在待加密字符串中的位置是1,除以k的余數(shù)為1,因此數(shù)字“5”放在第一份數(shù)據(jù)的第一個(gè)位置,即a(1)=5;同理可得,第一份數(shù)據(jù)為a(1)=5,a(2)=77;第二份數(shù)據(jù)為a(321)=15,a(322)=76;第三份數(shù)據(jù)為a(641)=78;
③將隨機(jī)產(chǎn)生的k與十進(jìn)制數(shù)64的和保存到a數(shù)組的最后一個(gè)值中,即a(961)=64+3=67;
④將數(shù)組a中所有有密文值的數(shù)組元素從后往前依次存放到數(shù)組b中,得到b(1)=67,b(2)=78,b(3)=76,b(4)=15,b(5)=77,b(6)=5;
⑤將數(shù)組b中的每個(gè)元素用0補(bǔ)足3位后依次連接并保存在sc中,得到sc=“067078076015077005”;
注:(asc(”0”)=48,asc(”A”)=65,asc(”a”)=97)
Private Sub command1_Click()
Dim a(1 To 961) As Integer
Dim sr, sc As String
Dim i, j, k, m, n, t As Integer
Dim b(1 To 961) As Integer
k = Int(Rnd * 4 + 3)
sr = Text1.Text
For i = 1 To 961
a(i) = -1
Next i
a(961) = k + 64
t = 960 / k
For i = 1 To Len(sr)
m = i Mod k - 1
n = i \k + 1
If i Mod k = 0 Then n = n - 1: m = m + k
  ____①____ = 127 - Asc(Mid(sr, i, 1)) ′將密文存儲(chǔ)到數(shù)組 a 中
Next i
For i = 1 To Len(sr) + 1
j = j + 1
Do While a(j) = -1
    j = j + 1
Loop
b(Len(sr) + 2 - i) = a(j) ′將有密文值的 a 數(shù)組元素存儲(chǔ)到數(shù)組 b 中
Next i
For i = 1 To Len(sr) + 1
sc = ____②____  ′連接密文并保存到 sc 中
Next i
Text2.Text = sc
End Sub
Function space(x As Integer) As String
For i = 1 To ____③____
space = space & ”0”
Next i
End Function
(1)若加密后的密文為“068029041”,則隨機(jī)數(shù)是____ ;在 Text1 中輸入的明文是____ 。
(2)在劃線處填寫缺失的代碼。
答案 (1)4 Vb (2)①a(m * t + n)
②sc & space(b(i)) & b(i) 或 sc + space(b(i)) + b(i)
③4 - Len(Str(x))
6.小林發(fā)給小周一串密文“VghpcyBpcyBhbiBleGFtcGx1”,并告訴小周,這串密文由明文字符串(僅包含ASCII字符,且字節(jié)數(shù)為3的倍數(shù))經(jīng)以下規(guī)則加密而成:
(1)將明文ASCII碼分成3個(gè)字節(jié)一組,順次連接后得到24位二進(jìn)制數(shù);
(2)將得到的24位二進(jìn)制數(shù)字按每6位一組分成4組,每組6個(gè)位;
(3)在(2)中得到的6個(gè)位前補(bǔ)上兩個(gè)0,得到4個(gè)字節(jié)的二進(jìn)制數(shù);
(4)將(3)中得到的四個(gè)二進(jìn)制數(shù)分別轉(zhuǎn)換為十進(jìn)制數(shù);
(5)將每個(gè)十進(jìn)制數(shù)轉(zhuǎn)換為1個(gè)加密字符,對(duì)應(yīng)的“密碼表”按數(shù)值由0到63依次為“ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/”
小周按照上述規(guī)則,設(shè)計(jì)了一個(gè)解密VB程序,功能如下:?jiǎn)螕簟敖饷堋卑粹oCommand1,
程序依次將文本框Text1中每4個(gè)密文字符按加密規(guī)則轉(zhuǎn)換為3個(gè)明文字符,連接這些明文字符,最后在文本框Text2中輸出結(jié)果。程序運(yùn)行效果如下圖所示。

實(shí)現(xiàn)解密功能的VB程序如下,請(qǐng)回答下列問題:
(1)若密文字符串的長(zhǎng)度是120,則解密后明文字符串的長(zhǎng)度是______。
(2)請(qǐng)?jiān)趧澗€處填入合適代碼。
Function Char2Int(c As String) As Integer
If c >= ”A” And c <= ”Z” Then ′字母”A”的 ASCII 碼是 65
Char2Int = Asc(c) - 65
ElseIf c >= ”a” And c <= ”z” Then ′字母”a”的 ASCII 碼是 97
Char2Int = Asc(c) - 71
ElseIf c >= ”0” And c <= ”9” Then ′數(shù)字”0”的 ASCII 碼是 48
______①____
ElseIf c = ”+” Then
Char2Int = 62
Else
Char2Int = 63
End If
End Function
Private Sub Command1_Click() ′解密過程
Dim n As Integer, s As String, i As Integer, ss As String
Dim a(0 To 3) As Integer ′依次存儲(chǔ)一組4個(gè)密文按密碼表換算出的數(shù)值
Dim b(0 To 2) As Integer ′依次存儲(chǔ)一組3個(gè)明文字符的 ASCII 值
s = Text1.Text
n = Len(s)
ss = ” ”
For i = 1 To n Step 4
For j = i To i + 3
a( ____②______)=Char2Int(Mid(s,j,1))
Next j
b(0) = a(0)*4 + a(1)[ST6
____③____
b(2)=(a(2) Mod 4)*64+a(3)
For j = 0 To 2
ss = ss + Chr(b(j))
Next j
Next i
Text2.Text = ss
End Sub
解析 每3個(gè)字母加密成4個(gè)字母。自定義函數(shù)是求c在密碼表中位置,“密碼表”按數(shù)值由0到63排列,0應(yīng)轉(zhuǎn)換成52。
答案 (1)90  (2)①Char2Int = Asc(c) + 4 ②(j - 1) Mod 4 ③b(1) = (a(1) Mod 16)*16 + a(2)[BT
7.回文數(shù)是從左向右讀和從右向左讀結(jié)果一樣的數(shù)字串,例如:1和363都是回文數(shù)。編寫VB程序,構(gòu)造一個(gè)大于給定正整n的最小回文數(shù)p。構(gòu)造方法如下:
(1)根據(jù)數(shù)字串n的左半部分子串st,構(gòu)造對(duì)稱的右半部分,生成回文數(shù)p;
(2)若p>n,則p即為最小回文數(shù),如:98712→98789。
(3)若p<=n,則需重新構(gòu)造p,方法是:從右向左查找字符串st中第一個(gè)非“9”的字符;若不存在,則形成“10…01”的回文數(shù)p,p的長(zhǎng)度比n的長(zhǎng)度多1為,如9999→10001。若存在,則將第一個(gè)非“9”字符加1,并將該字符后面部分用字符“0”填充,最后構(gòu)造對(duì)稱的右半部分,生成回文數(shù)p,如:98992→99099。98989

實(shí)現(xiàn)上述功能的VB程序如下,請(qǐng)回答下列問題:
(1)如果n為69999,則p為________。
(2)請(qǐng)?jiān)趧澗€處填入合適的代碼。
Private Sub Command1_Click()
Dim n As String, st As String, p As String
Dim 1n As Integer, i As Integer, j As Integer
n = Text1.Text
1n = Len(n)
st = Mid(n, 1, (ln + 1) \'2)
p = st
For i = ln \2 To 1 Step -1
p = p + Mid(n, i, 1)
Next i
If____①____Then
i = (1n + 1) \2
Do While i > 0
 If Mid(st,i,1)=”9” Then____②____ Else Exit Do
Loop
If i < 1 Then
p = ”1”
For i = 2 To 1n
   p = p + ”0”
Next i
p = p + ”1”
Else
p = Mid(st, 1, i - 1)
p = p + Chr(Asc(Mid(st, i, 1)) + 1)
For j = i + 1 To 1n - i
    p = p + ”0”
Next j
If____③____ Then p = p + Mid(p, i, 1)
For j = i - 1 To 1 Step -1
    p = p + Mid(p, j, 1)
Next j
End If
End If
Text2.Text = p
End Sub
解析 第一步轉(zhuǎn)換成69996,第二步轉(zhuǎn)換成70007。p是形成的回文數(shù),若p<=n,需要重新構(gòu)成回文數(shù)。需要查找非9的數(shù),需如果是9,繼續(xù)往前找。
答案 (1)70007 (2)①p <= n 或val(p)<=val(n)
②i=i-1 ③1n Mod 2 = 0 Or i < (1n + 1) \'2
或not (1n Mod 2 = 1 and i =(1n + 1) \'2
8.最大回文子串。回文字符串是具有回文特性的字符串:即該字符串從左向右讀,與從右向左讀都一樣.如:鳳落梧桐梧落鳳,abcba等。“最大回文子串”是指一個(gè)字符串中長(zhǎng)度最大的回文字符串,其基本算法思想如下:
(1)每個(gè)回文都有一個(gè)“中心”,當(dāng)回文字符數(shù)為奇數(shù)時(shí),中間的那個(gè)字符就是回文中心;但是當(dāng)回文的字符數(shù)為偶數(shù)時(shí),回文的中心是最中間的那兩個(gè)字符,且這兩個(gè)字符相同。
(2)對(duì)任意一個(gè)字符或者相同的兩個(gè)連續(xù)字符,我們都可以假設(shè)它為回文的“中心”,向它的左右兩邊擴(kuò)展出盡可能長(zhǎng)的回文。對(duì)于每種假設(shè),我們都能得到一個(gè)回文,而最長(zhǎng)回文必定由其中的某個(gè)假設(shè)中得到。
現(xiàn)編寫一個(gè)VB程序,在Text1中輸入一串字符,單擊“統(tǒng)計(jì)”按鈕,在Text2中顯示該字符串中的最大的回文子串(長(zhǎng)度相同時(shí),輸出最左邊的子串)。運(yùn)行界面如圖所示。

請(qǐng)回答下列問題:
(1)當(dāng) Text1 中輸入“123321344332423112113123”時(shí),則輸出的結(jié)果為__________。
(2)請(qǐng)?jiān)趧澗€處填入合適的代碼。
Dim n As Integer
Dim a(0 To 100) As String
Private Sub Command1_Click()
Dim s As String
Dim left As Integer, right As Integer, i As Integer
Dim max As Integer, m As Integer, b1 As Integer
′變量 b1 用于記錄回文子串的左端起點(diǎn)
Text2.Text = ” ”
s = Text1.Text
n = Len(s)
For i = 1 To n
a(i) = Mid(s, i, 1)
Next i
max = 0: left = 0: right = 0
For i = 1 To n
left = i
right = i
m = longest(left, right)
If m > max Then
  ____①____
max = m
End If
left = i
right = i + 1
If a(left) = a(right) Then
m = longest(left, right) + 1
If m > max Then
    b1 = i - m \2 + 1
    max = m
End If
End If
Next i
For i = b1 To ____②____
Text2.Text = Text2.Text + a(i)
Next i
End Sub
Function longest(left As Integer, right As Integer) As Integer
Dim p As Integer
p = 1
Do While left > 1 And right < n And ____③____
left = left - 1
right = right + 1
p = p + 2
Loop
longest = p
End Function
答案 (1)3112113  (2)①b1 = i - m \2 ②b1 + max - 1 ③a(left - 1) = a(right + 1)
9.火柴棒等式。用火柴棒可以擺出0-9的數(shù)字,擺放規(guī)則如下圖所示:

有一種火柴棒游戲,將火柴棒擺成形如“A+B=C”的火柴棒等式。
用n根火柴棒擺放數(shù)學(xué)等式的規(guī)則約定如下:
(1)A、B都是不大于1000的正整數(shù),若數(shù)值非零,則最高位不能是0。
(2)擺放“+”與“=”各使用兩根火柴棒。
(3)A+B=C 與 B+A=C 視為相同的等式。
(4)n根火柴棒必須全部用上。
小明依據(jù)上述規(guī)則使用VB編寫程序,研究“使用n根火柴棒,可以擺放出哪些不同的等式”,代碼如下所示。
請(qǐng)回答下列問題。
(1)某次運(yùn)行程序時(shí),顯示的等式中包含“7+17=24”,根據(jù)程序分析,輸入的n的值為:________。
(2)請(qǐng)?jiān)趧澗€處填入合適的代碼。
Dim sz(0 To 9) As Integer  ′數(shù)組元素sz(i)用于存儲(chǔ)數(shù)字i所使用的火柴棒的數(shù)量
Private Sub Form_Load()
sz(0)=6:sz(1)=2:sz(2)=5:sz(3)=5:sz(4)=4
sz(5)=5:sz(6)=6:sz(7)=3:sz(8)=7:sz(9)=6
End Sub
′自定義函數(shù)hcs用于求解擺放數(shù)字x需要使用的火柴棒數(shù)量
Function hcs(ByVal x As Integer) As Integer 
Dim s As Integer,k as integer
s = 0
Do While____①______
k = x Mod 10
s=s+sz(k)
x = x \10
Loop
hcs = s + sz(x)
End Function
Private Sub Command1_Click()
Dim n As Integer
Dim a As Integer, b As Integer, c As Integer
n = Val(Text1.Text)
ans = 0
List1.Clear
For a = 0 To 999
For b = ____②____ To 999
    c = a + b
    If ____③____ Then
      List1.AddItem (Str(a) + ”+” + Str(b) + ”=” + Str(c))
      ans = ans + 1
    End If
Next b
Next a
List1.AddItem (”共有” + Str(ans) + ”種等式”)
End Sub
解析 本題采用的是枚舉算法。題目中告知A+B=C 與 B+A=C 視為相同的等式,所以若a的枚舉范圍為0~999,那么b的枚舉范圍應(yīng)為a~999。自定義函數(shù)的調(diào)用。Hcs函數(shù)用來計(jì)算擺放數(shù)x需要用掉多少根火柴,那么等式a+b=c用掉的火柴的數(shù)量為hcs(a)+hcs(b)+hcs(c)+4(加號(hào)與等號(hào)需要的火柴數(shù)量),如果該等式的值為n時(shí),即是符合條件的等式。
答案 (1)21 (2)①x>=10 ②a ③hcs(a)+hcs(b)+hcs(c)=n-4
10.ROT-13(回轉(zhuǎn)13位)是一種簡(jiǎn)易的替換式密碼,編碼解碼規(guī)則相同,針對(duì)英文字母,僅僅只需要檢查字母順序并用13位后的對(duì)應(yīng)字母取代它,超過時(shí)則重新繞回26個(gè)英文字母開頭即可。即A換成N、B換成O,以此類推到M換成Z,然后序列反轉(zhuǎn);N換成A、O換成B……
小明決定以ROT-13為基礎(chǔ)制定新的ROT-n,即每次回轉(zhuǎn)不是13位,而是n位。因此他引入了11位數(shù)字密鑰和字符位置來計(jì)算n的值,并擴(kuò)大加密范圍,使得大小寫字母和數(shù)字都能加密,從而達(dá)到加密效果增強(qiáng)的目標(biāo)。具體規(guī)則如下:
(1)字符在奇數(shù)位置上n的值即當(dāng)前對(duì)應(yīng)密鑰值,偶數(shù)位置上n的值為當(dāng)前段密鑰中已經(jīng)出現(xiàn)的所有數(shù)字之和。
(2)數(shù)字字符在“0”到“9”之間回轉(zhuǎn),即超過“9”部分返回“0”開始繼續(xù)計(jì)算;大寫字母在“A”到“Z”范圍內(nèi)回轉(zhuǎn),小寫字母在“a”到“z”范圍內(nèi)回轉(zhuǎn),其它字符不變。
例如:當(dāng)密鑰為“123”時(shí),對(duì)應(yīng)加密方式如下:

第一段 第二段 第三段 ……
字符位置 1 2 3 4 5 6 7 8 9
密鑰 1 2 3 1 2 3 1 2 3
n的值 1 3 3 1 2 6 1 3 3
原文 H e 1 1 o 2 0 1 9
密文 I h o m q 8 1 4 2
程序界面如下圖所示:

程序代碼如下:
Private Sub Command1_Click()
Dim i, z, m, js As Integer
Dim s, c, h, t As String
Const my = ”14159265358”
Text2.Text = ” ”
s = Text1.Text
z = 1
For i = 1 To Len(s)
____①____
If z = 12 Then z = 1: js = 0
m = Val(Mid(my, z, 1))
js = js + m
If ____②____Then n = js Else n = m
If c >= ”0” And c <= ”9” Then
h = CStr((Val(c) + n) Mod 10)
ElseIf c >= ”A” And c <= ”Z” Or c >= ”a” And c <= ”z” Then
t = Chr(Asc(c) + n Mod 26)
If c >= ”A” And c <= ”Z” Then
     If Not(t>=”A”Andt<=”Z”) Then h = Chr(Asc(t) - 26) Else h = t
Else
     If Asc(c)+n Mod 26>122 Then h=Chr((Asc(c)+n Mod 26)-26) Else h = t
End If
Else
h = c
End If
Text2.Text = Text2.Text + h
____③____
Next i
End Sub
請(qǐng)回答下列問題:
(1)解密過程為加密過程的逆運(yùn)算,即由密文字符向前推導(dǎo)n 位尋找原字符,現(xiàn)已知密鑰為123,密文“WEjpqj”(無雙引號(hào))對(duì)應(yīng)的原文是__________。
(2)程序功能實(shí)現(xiàn)則代碼中劃線部分請(qǐng)?zhí)钊牒线m代碼
①處代碼__________;②處代碼__________;③處代碼__________。
答案 (1)VBgood (2)①c=mid(s,i,1) ②i mod 2 =0 (或等效答案) ③z=z+1
11.輸入一個(gè)正整數(shù)N,尋找一個(gè)比N大且最接近N的整數(shù),要求這個(gè)數(shù)的每位數(shù)字之和與N的每位數(shù)字之和相同。例如N=1231,則滿足上述條件的最接近N的整數(shù)為1240。為了解決此問題,設(shè)計(jì)算法如下:
①從右往左掃描,找第一個(gè)非0數(shù)字,將該數(shù)字減1后移到最后面。
②在當(dāng)前位置繼續(xù)往左掃描,找第一個(gè)非9的數(shù)字,若遇到,將該數(shù)字加1,結(jié)束;若遇到9,將其移到最后面,重復(fù)執(zhí)行②。
③若掃描完沒有加1,則最前面補(bǔ)”1”。
例如:N=199000,按照上述算法的處理過程是:199000→190008→100089→200089,滿足條件的最接近的數(shù)是200089。

(1)若輸入N=99900,則滿足條件的最接近的數(shù)為______。
(2)實(shí)現(xiàn)上述功能的VB代碼如下,請(qǐng)?jiān)趧澗€處填入適當(dāng)?shù)拇a。
Private Sub Command1_Click()
Dim a(1 To 50) As String
Dim n As String, step1 As Boolean, step2 As Boolean
Dim i As Integer, length As Integer, zero As Integer, cnt As Integer
n = Text1.Text
length = Len(n)
′將數(shù)字串n從右往左依次存儲(chǔ)在數(shù)組a中。
For i = 1 To length
a(i) =____①____
Next i
step1 = True: step2 = False   ′step1對(duì)應(yīng)步驟①,step2對(duì)應(yīng)現(xiàn)步驟②
zero = 0: cnt = 1
For i = 1 To length
 If step1 = True Then
If a(i) = ”0” Then
zero = zero + 1
Else
  ____②____
If zero > 0 Then
    a(cnt) = a(i)
    a(i) = ”0”
End If
step1 = False
step2 = True
End If
 ElseIf step2 = True Then
If a(i) = ”9” Then
  If zero = 0 Then
   t=a(cnt+1):a(cnt+1)=a(cnt):a(cnt)=t
   cnt = cnt + 1
  If i <> cnt Then
     a(i) = a(i - 1)
   End If
  Else
   ____③____
   a(cnt) = ”9”
   a(i) = ”0”
   cnt = cnt + 1
  End If
Else
  a(i) = a(i) + 1
  step2 = False
  Exit For
End If
End If
Next i
′最前面補(bǔ)”1”
If step2 Then
  length = length + 1
  a(length) = ”1”
End If
′輸出結(jié)果,代碼略。
End Sub
解析 (1)N=99900,按照上述算法的處理過程是:99900→99008→90089→00899→100899。
(2)將輸入的n倒著存放在數(shù)組a中,便從右往左掃描。第一個(gè)步驟找第一個(gè)非0數(shù)字,將該數(shù)字減1后移到最后面。
答案 (1)100899  (2)①M(fèi)id(n,length-i+1,1)
或Mid(n,Len(n)-i+1,1) ②a(i)=a(i)-1 ③a(cnt+1)=a(cnt)
12.學(xué)校籌辦社團(tuán)節(jié),每個(gè)社團(tuán)先到A場(chǎng)地做“準(zhǔn)備”,然后到B場(chǎng)地“風(fēng)采展示匯報(bào)”。同一場(chǎng)地,同一時(shí)間只允許一個(gè)社團(tuán)使用。每個(gè)社團(tuán)使用A、B場(chǎng)地時(shí)間都有所不同。已知學(xué)校共n個(gè)社團(tuán),第i個(gè)社團(tuán)使用A場(chǎng)地時(shí)長(zhǎng)為a[i]分鐘,使用B場(chǎng)地時(shí)長(zhǎng)為b[j]分鐘。為了更高效的組織這次活動(dòng),某同學(xué)編寫了如下VB程序計(jì)算此次活動(dòng)的最小總時(shí)長(zhǎng)和社團(tuán)參會(huì)的順序。
算法思路:
1.統(tǒng)計(jì)m(i)表示第i個(gè)社團(tuán)中在A和B兩個(gè)場(chǎng)地中用時(shí)的較小值。
2.按m(i)值從小到大排序,然后按m(i)值的順序,逐個(gè)社團(tuán)安排參會(huì)順序,策略如下:為了使得總時(shí)長(zhǎng)最短,讓A場(chǎng)地用時(shí)最少的最先開始;B場(chǎng)地用時(shí)最少的最后開始。對(duì)于每個(gè)社團(tuán),若m與該社團(tuán)在A場(chǎng)地使用時(shí)間相同,則將它排在利余的可排位置的最前面,若m(j)與該社團(tuán)B場(chǎng)也使用的時(shí)間相等,則將它安排在剩余可排位置的最后面。例如:N=5,社團(tuán)序號(hào)分別是{1,2,3,4,5}
1至5號(hào)社團(tuán)使用A場(chǎng)地的時(shí)間依次為:{3,5,8,7,10},1至5號(hào)社團(tuán)使用B場(chǎng)地的時(shí)間依次為:{6,2,1,4,9},
按上述算法可求得5個(gè)社團(tuán)m[j]的值依次為:{3,2,1,4,9}。
(1)按上述算法策略,5個(gè)社團(tuán)中最先進(jìn)入A場(chǎng)地的社團(tuán)的序號(hào)是________(填數(shù)字)。
(2)請(qǐng)?jiān)趧澗€處填入合適的代碼。
Dim s(1 To 100) As Integer ′s(i)表示第 i社團(tuán)存儲(chǔ)社團(tuán)序號(hào)
Dim a(1 To 100) As Integer ′a(i)表示第 i社團(tuán)使用A場(chǎng)地時(shí)間
Dim b(1 To 100) As Integer ′b(i)表示第i社團(tuán)使用B場(chǎng)地時(shí)間
Dim m(1 To 100) As Integer ′m(i)表示 第i社團(tuán)兩個(gè)場(chǎng)地用時(shí)間的較小值
Dim ans(1 To 100) As Integer ′ans(i)表示第 i個(gè)參會(huì)的社團(tuán)序號(hào)
Dim n As Integer
Private Sub Form_Load()
′從文件中讀取N的值和每個(gè)社團(tuán)使用A場(chǎng)地和B場(chǎng)地的時(shí)間分別存入a(i)和b(i),代碼略
End Sub
Private Sub Commandl_Click0()
For i = 1 To n
m(i) = (i): s(i) = i
If ______①____ Then m(i) = b(i)
Next i
For i = 1 To n - 1
For j = i + 1 To n
If m(i) > m(j) Then
    t=m(i):m(i)=m(j):m(j)=t
    t=s(i):s(i)=s(i):s(i)=t
End If
Next j
Next i
′安排社團(tuán)參會(huì)順序
k = 0: t = n + 1
For i = 1 To n
If____②______ Then
k = k + 1
ans(k) = s(i)
Else
t = t - 1
ans(i) = s(i)
End If
Next i
′輸出第i個(gè)參會(huì)的社團(tuán)的序號(hào)ans(i)
For i = 1 To n
Listladditem ”第” + Str(i) + ”個(gè)參會(huì)的社團(tuán)序號(hào)為” + s(ans(i))
Next i
′根據(jù)當(dāng)前社團(tuán)參會(huì)順序,計(jì)算總時(shí)長(zhǎng)
k = 0: t = 0
For i = 1 To n
k = k + a(ans(i))
If t < k Then ____③____
t = t + b(ans(i))
Next i
List1.AddItem ”最少的總用時(shí):” + Str(t)
End Sub
解析 (1)A場(chǎng)地比B場(chǎng)地小的唯一只有1號(hào)社團(tuán),因此1號(hào)社團(tuán)是最先進(jìn)入A場(chǎng)地,3號(hào)社團(tuán)是最后進(jìn)入B場(chǎng)地。
(2)m(i)是計(jì)算a(i)和b(i)的較小值,因此當(dāng)b(i)(3)s(i)表示第 i社團(tuán)存儲(chǔ)社團(tuán)序號(hào),m數(shù)組已經(jīng)有序,如果m記錄的是a數(shù)組中放在前面,否則放在后面。
答案 (1)1 (2)①b(i)②m(i)=a(s(i)) ③t=k


展開更多......

收起↑

資源預(yù)覽

<pre id="tfb94"><li id="tfb94"></li></pre>

<bdo id="tfb94"><rt id="tfb94"></rt></bdo>
  • <menu id="tfb94"><dl id="tfb94"></dl></menu><i id="tfb94"><acronym id="tfb94"><sub id="tfb94"></sub></acronym></i>

    1. 主站蜘蛛池模板: 台江县| 定结县| 新竹县| 深水埗区| 太和县| 平潭县| 余江县| 彰武县| 石林| 苍山县| 竹北市| 沅江市| 绥中县| 金华市| 沙湾县| 晋江市| 普兰县| 育儿| 江都市| 集贤县| 洮南市| 玉林市| 南康市| 长海县| 朝阳区| 城市| 台南县| 崇左市| 徐州市| 大名县| 海口市| 青龙| 仙游县| 岐山县| 锡林浩特市| SHOW| 虹口区| 固阳县| 扎鲁特旗| 阿拉善右旗| 措美县|