试题

试题 试卷

logo

题型:综合题 题类:常考题 难易度:普通

浙江省高中信息技术 加密问题练习

下面是一种加密解密的方法。当输入一串进制数字,用空格分离时,每个进制数字的数值与字母A…Z成一一对应关系。小明只要将这串数字的数值求出,然后将数字值转换成相应的字母即破解密码得到明文。若输入的进制数值超出1~26范围,则当成非法数值。表中数值100、153属于非法数值,用字符“*”表示,在解密过程中非法字符不予处理。

密文

1100100

11

1000

1001

1110

1

10011001

对应数值

100

3

8

9

14

1

153

明文

*

C

H

I

N

A

*

(1)、根据题意,若密文为16进制的“68 17 9 E 1F ”,则其明文为
(2)、实现上述功能的VB程序如下,请在划线处填上合适的代码。

Private Sub Command1_Click()     ‘密文解密过程

Dim s As String, yw As String

Dim n As Integer,i As Integer,k As Integer,value As Integer

Dim flag As Boolean

s =Text1.Text

yw =“”

flag = True

k = Val(Text4.Text)     ‘k为密文的进制

n = Len(s)

value = 0

For i = 1 To n

 t = Mid(s, i, 1)

 If flag Then

  If (t <> “”)Then

   If t >=“0” And t <= “9” Then

    value =

  Else If t >=“A” And t <= “F” Then

   value = value*k+Asc(t)-Asc(“A”) + 10

  End If

 Else

  flag = False

  If value <=26 Then

   yw =

  Else

   yw = yw + “*”

  End If

  value = 0

  End If

 Else

  If t >=“0” And t <=“9” Then

  value = Asc(t) - Asc(“0”)

  flag = True

  Else If t >= “A” And t <= “F” Then

  value = Asc(t) - Asc(“A”)+ 10

  flag = True

  End If

 End If

 Next i

 If flag Then

   If value < = 26 Then

    yw = yw + Chr(Asc(“A”) + value - 1)

  Else

   yw = yw + “*”

  End If

End If

Text2.Text = yw

End Sub

Private Sub Command2_Click()     ‘密文加密过程

Dim s As String, yw As String, t As String, key As String

Dim i As Integer, n As Integer, k As Integer, m As Integer

key = “0123456789ABCDEF”

s = Text2.Text

n = Len(s)

yw = “”

k = Val(Text4.Text)

For i = 1 To n

 t = Mid(s, i, 1)

 m =

 If m >= 1 And m <= 26 Then

  t =“”

  Do While m > 0

   t = Mid(key,(m Mod k + 1) , 1) + t

  

  Loop

  mw = mw + t + “ ”

  End If

Next i

Text3.Text = mw

End Sub

举一反三
求最长升序子序列的长度。一个数的序列bi,当b1 < b2 < ... < bS的时候,我们称这个序列是升序的。对于给定的一个序列(a1, a2, ..., aN),我们可以得到一些升序的子序列(ai1, ai2, ..., aiK),这里 1 <= i1 < i2 < ...<iK <= N。比如,对于序列(1, 7, 3, 5, 9, 4, 8),有它的一些升序子序列,如(1, 7), (3, 4, 8)等等。这些子序列中最长的长度是4,比如子序列(1, 3, 5, 8)。小王设计VB程序用于求最长升序子序列的长度,在文本框Text1中输入n个各不相同的数据(各数据之间以逗号隔开),单击“求解”按钮Command1后在标签Label1中输出最长升序子序列的长度,运行界面如图所示。

具体算法描述如下:

⑴将文本框Text1中的n个数据依次读取到数组a中;

⑵构造一个数组b(j),j表示升序子序列的长度,b(j)的值表示所有j长度升序序列中最小的末尾元素值。例:序列(2,6,4,5),长度为2的子序列有(2,6)、(2,4)、(2,5)、(4,5),则b(2)=4;

⑶从第1个元素开始,依次处理到第i(1≤i≤n)个元素为止,b数组所能达到的最大下标值maxlen,处理过程分两种情况:

A.a(i)>b(maxlen),则最长升序子序列的长度增加;

B.a(i)<b(maxlen),则在b数组中逆序查找到第一个b(j)>a(i)(maxlen-1≤j≤1),更新数组b中升序子序列长度为j+1时所存储的元素值。

以图中数据为例:

⑷数组b的最大下标值即为最长升序子序列的长度。实现上述过程的VB程序如下,请回答下列问题:

返回首页

试题篮