试题

试题 试卷

logo

题型:综合题 题类:模拟题 难易度:困难

浙江省2019年信息技术选考模拟试卷五

【加试题】删数问题。输入一个数字串s,删去其中k个数字(k<数字串中数字的个数),使剩余数字在保持相对位置不变的情况下构成一个值最小的整数。例如,s=“19990608”,k=4,处理结果为:608。

删数的算法如下:

⑴如果k>0,则从前往后检测相邻字符,否则,转⑶;

⑵①若所有相邻字符都已非降序,则将串尾k个字符删去,k值置0,转⑴;

②若相邻两数存在逆序(即前一个数>后一个数),则将前一个数删除,k值变化,然后回到⑴;

⑶去掉串首的0,输出结果。

按照上述算法思路,编写了VB程序,功能如下:在文本框Text1中输入数字串,在文本框Text2中输入删数的个数,单击“处理”按钮Command1,在文本框Text3中显示最小的整数。程序运行界面如图所示。

(1)、如果输入的数字串为“20160125”,删除个数为4,则结果是
(2)、实现上述功能的VB程序如下,请在划线处填入合适代码。

delete函数说明:delete(st,x,y)为自定义函数,功能为在字符串st中删除x位置开始的y长度的子串。

Private Sub Command1_Click()

Dim s As String, k As Integer, i As Integer, j As Integer, n As Integer

s = Text1.Text

k = Val(Text2.Text)

n = Len(s)

Do While k > 0

  i = 1

  Do While i < n And

    i = i + 1

  Loop

  If i = n Then

    

     n = n - k

     k = 0

  Else

     s = delete(s, i, 1)

     n = n - 1

    

  End If

Loop

i = 1

Do While n > 1 And Mid(s, 1, 1) = "0"

   s = delete(s, 1, 1)

   i = i + 1

   n = n - 1

Loop

   Text3.Text = s

End Sub

Function delete(st As String, x As Integer, y As Integer) As String

  delete = Mid(st, 1, x - 1) + Mid(st, x + y) 'mid函数第3个参数省略,则截取从开始位置向右到字符串结尾的所有字符

End Function

举一反三
维吉尼亚(Vigenere)密码。如下图所示,分别用行和列表示待加密的字符(明文)和当前字符的密钥,行和列的交叉点的字符即为加密后的结果(密文)。在加密时,密文与明文的字母大小写形式保持一致,如,明文字母为大写,则加密后的密文字母也为大写;当密钥长度不足时重复使用密钥。例如:当明文M=HelloWorld,密钥K=abc时,密文C=HfnlpYosnd。运算过程如下所示:

明文:HelloWorld

密钥:abcabcabca

密文:HfnlpYosnd

A

B

C

D

E

F

G

H

I

J

K

L

M

N

O

P

Q

R

S

T

U

V

W

X

Y

Z

A

A

B

C

D

E

F

G

H

I

J

K

L

M

N

O

P

Q

R

S

T

U

V

W

X

Y

Z

B

B

C

D

E

F

G

H

I

J

K

L

M

N

O

P

Q

R

S

T

U

V

W

X

Y

Z

A

C

C

D

E

F

G

H

I

J

K

L

M

N

O

P

Q

R

S

T

U

V

W

X

Y

Z

A

B

D

D

E

F

G

H

I

J

K

L

M

N

O

P

Q

R

S

T

U

V

W

X

Y

Z

A

B

C

E

E

F

G

H

I

J

K

L

M

N

O

P

Q

R

S

T

U

V

W

X

Y

Z

A

B

C

D

F

F

G

H

I

J

K

L

M

N

O

P

Q

R

S

T

U

V

W

X

Y

Z

A

B

C

D

E

G

G

H

I

J

K

L

M

N

O

P

Q

R

S

T

U

V

W

X

Y

Z

A

B

C

D

E

F

H

H

I

J

K

L

M

N

O

P

Q

R

S

T

U

V

W

X

Y

Z

A

B

C

D

E

F

G

I

I

J

K

L

M

N

O

P

Q

R

S

T

U

V

W

X

Y

Z

A

B

C

D

E

F

G

H

J

J

K

L

M

N

O

P

Q

R

S

T

U

V

W

X

Y

Z

A

B

C

D

E

F

G

H

I

K

K

L

M

N

O

P

Q

R

S

T

U

V

W

X

Y

Z

A

B

C

D

E

F

G

H

I

J

L

L

M

N

O

P

Q

R

S

T

U

V

W

X

Y

Z

A

B

C

D

E

F

G

H

I

J

K

M

M

N

O

P

Q

R

S

T

U

V

W

X

Y

Z

A

B

C

D

E

F

G

H

I

J

K

L

N

N

O

P

Q

R

S

T

U

V

W

X

Y

Z

A

B

C

D

E

F

G

H

I

J

K

L

M

O

O

P

Q

R

S

T

U

V

W

X

Y

Z

A

B

C

D

E

F

G

H

I

J

K

L

M

N

P

P

Q

R

S

T

U

V

W

X

Y

Z

A

B

C

D

E

F

G

H

I

J

K

L

M

N

O

Q

Q

R

S

T

U

V

W

X

Y

Z

A

B

C

D

E

F

G

H

I

J

K

L

M

N

O

P

R

R

S

T

U

V

W

X

Y

Z

A

B

C

D

E

F

G

H

I

J

K

L

M

N

O

P

Q

S

S

T

U

V

W

X

Y

Z

A

B

C

D

E

F

G

H

I

J

K

L

M

N

O

P

Q

R

T

T

U

V

W

X

Y

Z

A

B

C

D

E

F

G

H

I

J

K

L

M

N

O

P

Q

R

S

U

U

V

W

X

Y

Z

A

B

C

D

E

F

G

H

I

J

K

L

M

N

O

P

Q

R

S

T

V

V

W

X

Y

Z

A

B

C

D

E

F

G

H

I

J

K

L

M

N

O

P

Q

R

S

T

U

W

W

X

Y

Z

A

B

C

D

E

F

G

H

I

J

K

L

M

N

O

P

Q

R

S

T

U

V

X

X

Y

Z

A

B

C

D

E

F

G

H

I

J

K

L

M

N

O

P

Q

R

S

T

U

V

W

Y

Y

Z

A

B

C

D

E

F

G

H

I

J

K

L

M

N

O

P

Q

R

S

T

U

V

W

X

Z

Z

A

B

C

D

E

F

G

H

I

J

K

L

M

N

O

P

Q

R

S

T

U

V

W

X

Y

依据上述算法描述设计了如下VB程序。请回答下列问题:

在文本框Text1中输入待加密的n个字符(仅由ASCII码字符构成,最多支持960个字符),输入后单击加密按钮,在文本框Text2中产生密文。加密方式如下:

①定义一个数组a(1 to 961)。产生一个3到6之间的随机整数k,将十进制数960均分成k份,字符在字符串中的位置除以k的余数决定该字符存放在第几份数据中(余数为1保存在第一份数据中,余数为2保存在第二份数据中……,余数为0保存在第k份数据中);

②用十进制数127减去每个字符的ASCII码值,得到的差作为该字符的密文,并保存在数组a中,同一段内的密文依次存放;

③将随机产生的数k加64后保存在数组元素a(961)中,并一起参与加密;

④将数组a中所有有密文值的数组元素从后往前依次存放到数组b中;

⑤将数组b中的每个密文用3位数字保存,不足3位的前面用0补足,然后依次连接保存在变量sc中;

⑥在文本框Text2中输出sc。

例如:

①若现有待加密的字符串为“zp123”,产生的随机数k=3,则960分成3份,每份可存放320个值,分别为a(1)至a(320),a(321)至a(640),a(641)至a(960);

②由于Asc(“z”) =122,则127-122=5。字符“z”在待加密字符串中的位置是1,除以k的余数为1,因此数字“5”放在第一份数据的第一个位置,即a(1)=5;同理可得,第一份数据为a(1)=5,a(2)=77;第二份数据为a(321)=15,a(322)=76;第三份数据为a(641)=78;

③将随机产生的k与十进制数64的和保存到a数组的最后一个值中,即a(961)=64+3=67;

④将数组a中所有有密文值的数组元素从后往前依次存放到数组b中,得到b(1)=67,b(2)=78,b(3)=76,b(4)=15,b(5)=77,b(6)=5;

⑤将数组b中的每个元素用0补足3位后依次连接并保存在sc中,得到sc=“067078076015077005”;

⑥输出sc。

注:(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

    Randomize

    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))      ‘将密文存储到数组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数组元素存储到数组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

返回首页

试题篮