高考专题复习专题九 其他常用算法信息技术Word下载.docx

上传人:b****3 文档编号:16927787 上传时间:2022-11-27 格式:DOCX 页数:23 大小:168.85KB
下载 相关 举报
高考专题复习专题九 其他常用算法信息技术Word下载.docx_第1页
第1页 / 共23页
高考专题复习专题九 其他常用算法信息技术Word下载.docx_第2页
第2页 / 共23页
高考专题复习专题九 其他常用算法信息技术Word下载.docx_第3页
第3页 / 共23页
高考专题复习专题九 其他常用算法信息技术Word下载.docx_第4页
第4页 / 共23页
高考专题复习专题九 其他常用算法信息技术Word下载.docx_第5页
第5页 / 共23页
点击查看更多>>
下载资源
资源描述

高考专题复习专题九 其他常用算法信息技术Word下载.docx

《高考专题复习专题九 其他常用算法信息技术Word下载.docx》由会员分享,可在线阅读,更多相关《高考专题复习专题九 其他常用算法信息技术Word下载.docx(23页珍藏版)》请在冰豆网上搜索。

高考专题复习专题九 其他常用算法信息技术Word下载.docx

11月浙江选考)某种数据加密方法描述如下(加密前后的数值都是0~255的整数):

•以m个数据为一段,将n个待加密数据依次分割成若干个数据段。

剩余数据(个数小于m)为一个独立数据段。

•数据段加密规则:

数据个数等于m的数据段,先进行值变换,再进行位置变换,得到加密数据段。

数据个数小于m的数据段,只进行值变换,直接得到加密数据段。

•依次合并加密数据段,即为最后的加密数据。

值变换:

用值变换密钥数组x(元素个数为m,值为0~255的整数),将待加密数据段中的数据进行值变换,方法如下:

值变换后第i个元素=(待加密数据段第i个元素+x(i))Mod256,其中i=1,2,…,m

位置变换:

用位置变换密钥数组y(元素个数为m,值为1~m的不重复整数),将上述值变换后的m个元素进行段内位置变换,方法如下:

加密后数据段第y(i)个元素=值变换后第i个元素,其中i=1,2,…,m

例如,n=5,m=3的数据加密过程如下:

(1)已知m=3,数组x与数组y中的数据如下表所示。

则待加密数据段“155,1,250”加密后的数据段为________(填数据,用逗号分隔)。

x

(1)

x

(2)

x(3)

10

20

30

y

(1)

y

(2)

y(3)

3

1

2

(2)小张根据上述加密算法,设计了一个对应的解密程序,其VB代码如下,请在划线处填入合适的代码(解密与加密使用相同的密钥数据)。

PrivateSubCommand1_Click()

Constn=100

Constm=6

DimiAsInteger,jAsInteger

Dima(1Ton)AsInteger,b(1Ton)AsInteger

Dimx(1Tom)AsInteger,y(1Tom)AsInteger

′读取值变换与位置变换的密钥数据,分别保存在数组x与y中,代码略。

′读取待解密数据,保存在数组a中,代码略。

′下面进行位置变换:

位置变换后数据保存到数组b中

Fori=1To____①____

Forj=1Tom

    ____②____

Nextj

Fori=(n\m)*m+1Ton

b(i)=a(i)

′下面进行值变换:

值变换后数据仍保存到数组b中

j=1

Fori=1Ton

b(i)=____③____

j=j+1

Ifj>mThenj=1

′输出解密后数据,代码略。

EndSub

解析 数据构成环是本题考核的其中一个问题。

155,1,250值变换后变成165,21,24,位置变换后变成21,24,165。

加密时,先进行值变换,再进行位置变换,解密时应先位置变换,再进行值变换。

进行位置变换时,变量i表示共有多少整数段,也可以理解为多少行,易知完整的m个数据段的个数为nm个.变量j表示每段中每列的位置。

当i=1时,完成第1段数据变换,即b(j)=a(y(j)),当i=2时,完成第2段数据变换,即b(m+j)=a(m+y(j)),当i=3时,完成第3段数据变换,即b(m*2+j)=a(m*2+y(j)),当i=4时,完成第4段数据变换,即b(m*3+j)=a(m*3+y(j))……归纳得出第i段数据变换为b((i-1)*m+j)=a((i-1)*m+y(j))。

在进行值变换时,加密时值的变换方式为b(i)=(b(i)+x(j))Mod256。

推导出解密时b(i)=b(i)-x(j),其中b(i)>

=x(j)或b(i)=b(i)-x(j)+256,其中b(i)<

x(j)第一种情况加上256,可以通过Mod256,去掉256,综合两种情况表达式为:

b(i)=(b(i)-x(j)+256)Mod256。

答案 

(1)21,24,165

(2)①nm 或Int(n/m)

②b((i-1)*m+j)=a((i-1)*m+y(j))

③(b(i)+256-x(j))Mod256

或(b(i)+256-x((i-1)Modm+1))Mod256

1.插入排序也是一种排序的方法,在各地的模拟卷是经常出现。

其算法的原理可以理解为在整理一幅扑克牌的过程,当摸到两张及以上牌,将牌放在合适位置,实现整幅牌从小到大排列。

2.数据构成环在数据加密、钟表等问题中经常出现。

关键是构成环的原理。

考点1 插入排序

一、排序思想

在将第i个数key插入到数据区间[1,i-1]或[i+1,n]范围内,使得数据区间[1,i]或[i,n]有序。

重复执行n-1遍,使得全部数据有序。

该算法包括两个步骤,一是查找key位置,二是把key放在该位置上。

查找key位置的方法是:

把a(i)赋值给key,如果从前往后有序,变量j从i-1位置开始,向前查找,a(j)与key比较,直到找到位置或找到最前面(j=1)。

如果从后往前有序,变量j从i+1位置开始,向后查找,a(j)与key比较,直到找到位置或找到最后面(j=n)。

二、算法实现

1.理解变量i、j和key的含义

变量i每次要插入数的位置,key表示第i个数的值。

j表示查找和比较位置位置。

2.从前往后有序,进行升序排列

从第2个数(i的初值为2)开始,插入到前面有序的数列中。

某数列已经插入3个数,数列为49,60,71,61,54,3,66,以i=4为例说明插入排序的过程。

查找位置j:

区间为[1,3],从第3个数开始向前查找。

比较对象:

先把当前a(i)的值存在变量key中,再用key分别与前面的数a(j)进行比较。

找到位置的条件:

比前面的数大,即key≥a(j)。

当key≥a(j)时,key应所处的位置是j+1。

如果没有找到位置,条件是key<a(j),把该数向后移动,即把a(j)赋值给a(j+1),a(j)=a(j+1)。

三、实现的核心代码

四、也可以从后往前进行插入排序

变量i的初值是n-1,一直插入排序,使得第1个数在序。

【例1】小明对两个班级的90名同学进行编号,随机产生不同号码,对于其中相同的号码,只保留一个,在号码产生过程中,号码始终是从小号到大号排列,直到找到10个同学号码为止。

1)用b数组表示该号码是否产生,b(x)若为0,表示x未产生;

2)先产生第1个号码,从第2个开始,产生数x,先判断b(x)的值,如果为0,再去插入到合适位置;

3)如果x比前面第一个数大,则直接放入a(i)数组元素中,否则利用对分查找法找到相应位置;

4)从该数x应该存放的位置开始的数据向后移动,并把该数x存放起来。

单击“产生”按钮Command1,在列表框List1中输出每次产生的号码。

请在划线处填入合适的代码。

Dima(10)AsInteger,b(100)AsInteger

PrivateSubCommand1_Click()

Dimi AsInteger,xAsInteger,sAsString

a

(1)=Int(Rnd()*90+1):

b(a

(1))=1

①____

DoWhilei<

=10

x=Int(Rnd()*90+1)

Ifb(x)=0Then

    If____②____Then

      a(i)=x

    Else

      wz=seach(i,x)

      Fork=i-1TowzStep-1

        a(k+1)=a(k)

      Nextk

     ____③____

    EndIf

    b(x)=1:

s=“产生前”+Str(i)+“个号码是:

      Forj=1Toi

        s=s+Str(a(j))

      Nextj

      List1.AddItems

      i=i+1

Loop

Functionseach(pAsInteger,xAsInteger)AsInteger

DimmAsInteger,jAsInteger

m=Int(p/2)

If______④____Then

j=m+1

DoWhilea(j)<

x

    j=j+1

Loop

Else

Ifm=1Thenj=1Elsej=m-1

DoWhilea(j)>

xAndj>

=1

    j=j-1

j=j+1

seach=j

EndFunction

解析 变量i表示插入的位置,往往从第2个位置开始。

B数组是一个标志,若其值为0,表示该下标的数没有出现过。

若他比前一个数大,直接放入第i个位置,否则进行查找,并放入合适位置。

答案 ①i=2 ②x>

a(i-1) ③a(k+1)=x ④a(m)<

x

【变式训练1】在编号为1-100的观众中随机产生10位不同的幸运观众,并将幸运观众的编号升序排列。

n=10:

a

(1)=Int(Rnd*100+1)

i=2

=n

 t=Int(Rnd*100+1)

 Forj=1Toi-1

Ifa(j)=tThenExitFor

 If____①____Then

Forj=i-1To1Step-1

Ifa(j)>

tThena(j+1)=a(j)ElseExitFor

 Nextj

 ____②____

 i=i+1

 EndIf

解析 要求产生10位不同的幸运观众,在已经产生的号码中先进行查找,如果没有重复,会找到i的位置。

在利用插入排序的思想,把新产生的数放入合适的位置。

答案 ①i=j ②a(j+1)=t

考点2 约瑟夫环问题

约瑟夫环是一个数学的应用问题:

已知n个人(以编号1,2,3……n分别表示)围坐在一张圆桌周围。

从编号为k的人开始报数,数到m的那个人出列;

他的下一个人又从1开始报数,数到m的那个人又出列;

依此规律重复下去,直到圆桌周围的人全部出列。

在生活中会碰到类似很多问题,如钟表走向、值日的轮值等。

一、以24小时制式计算(0点-23点),完成如下表格

t的初值

经历时长(n)

结果时间

统一

表达式

t=3时

13小时后

16时

(t+n)Mod24

23小时后

2时

t=15时

-3小时后

12时

(t+n+24)

Mod24

-18小时后

21时

二、将字母表的字母A替换为E,B替换为F,C替换为G,…,W替换为A,X替换为B,…

对于环的操作一般用Mod运算符进行计算,某个数Modn的范围是[0,n-1],其他下标必须从0开始编号。

若要实现从1开始编号,需把编号减去1,进行运算后,再加上1。

对于任意字母表中第t个位置的字母加密后的表达式为(t-1+4)Mod26+1。

如字母w在字母表中处于第23,代入以上公式,加密后为第1个位置。

字符ch转换的表达式是Chr((Asc(ch)-1+4)Mod26+1)。

也可以用以下自定义函数来实现大写字母x向后移动y个位置的功能

FunctionRun(xAsString,yAsInteger)AsString

DimansAsInteger

ans=Asc(x)-65

ans=(ans+y)Mod26

Run=Chr(ans+65)

同理,例如对于一个m行乘以n列的矩阵,第i个位置元素所处的列数为(i-1)Modn+1。

所处行为(i-1)\n+1。

【例2】字符环上的最长公共字符串。

将字符串首尾相接后可以得到一个环,如图1和图2分别是由字符串“ABCUVKLM”和“MADJKLUVKL”首尾相接后得到的环。

在图1和图2所示的两个环中,最长的公共字符串为“UVKLMA”(图中带背景圆圈表示)。

编写VB程序,实现如下功能:

在文本框Text1和Text2中分别输入一个字符串(仅由大写字母构成,每个字符串长度不超过100),单击命令按钮Command1后,在标签Label3中输出两个字符串构成的环的最长公共字符串长度(字符串在环中必须连续)。

程序运行效果如图所示。

实现上述功能的VB程序如下,请回答下列问题:

(1)根据题意描述,字符串“BCEFGK”和“GKBLMCKEF”的最长公共字符串长度为________。

(2)请在划线处填入合适的代码。

Functiongetmin(aAsInteger,bAsInteger)′获取两个整数的较小者

Ifa<

bThengetmin=aElsegetmin=b

Dims1AsString,s2AsString,iAsInteger,jAsInteger,xAsInteger,yAsInteger

DimcntAsInteger,ansAsInteger,len1AsInteger,len2AsInteger

s1=Text1.Text

s2=Text2.Text

len1=Len(s1)

len2=Len(s2)

minlen=____①____ ′minlen中保存s1和s2中较短字符串的长度

ans=0

Fori=1Tolen1

Forj=1Tolen2

cnt=0:

x=i:

y=j

DoWhile ____②____Andcnt<

minlen

    cnt=cnt+1

    x=xModlen1+1

    y=yModlen2+1

If ____③____Thenans=cnt

Label3.Caption=Str(ans)

解析 用x和y分别记录s1和s2中正在比较的字符的位置,通过对字符串长度求余,巧妙地回到第一个字符的位置,实现了字符环的功能。

注意:

因为字符串的下标从1开始,故不能写作x=(x+1)Modlen1。

答案 

(1)5 

(2)①getmin(len1,len2) ②Mid(s1,x,1)=Mid(s2,y,1) ③cnt>

ans

【变式训练2】编写VB程序,实现如下功能:

在文本框Text1中输入当天对应的星期,文本框Text2中输入天数,单击“推算”按钮Command1,推算出相应天数后的星期情况,并在标签Label1中输出结果。

界面如图所示。

(1)为实现上述功能,请在划线处填入合适的代码。

DimxAsString,xqAsString,numAsInteger

DimiAsInteger,hAsInteger

x=“日一二三四五六”

xq=Text1.Text

i=1

num=Val(Text2.Text)

Fori=1ToLen(x)

Ifxq=Mid(x,i,1)Thenh=i:

ExitFor

Nexti  

_____①____

Label1.Caption=“星期”+Mid(x,r,1)

(2)若当天是“星期五”,在文本框Text2中输入“166”,单击“推算”按钮后,标签Label1中显示的内容是________。

解析 先找出今天在星期中的位置,但构成环,需用0-(n-1)来表示,因此输入五,获得位置6,但用5来表示,加上166=171,171Mod7=3,表达成字符串还加1,应用星期三。

答案 

(1)①r=(h+num-1)Mod7+1 

(2)星期三

一、选择题

1.有如下VB程序段:

Fori=4To3Step-1

Ifa(i)<

a(i-1)Then

 tmp=a(i)

 Forj=i-1To1Step-1

   Iftmp>

a(j)ThenExitFor

   a(j+1)=a(j)

 a(j+1)=tmp

数组元素a

(1)到a(6)的值依次为“19,8,96,92,85,88”,经过该程序段“加工”后,数组元素a

(1)到a(6)的值依次为(  )

A.8,19,92,96,85,88B.8,19,85,88,92,96

C.19,8,92,96,85,88D.19,8,85,92,96,88

解析 变量i从第4个位置开始,如果小于他前面的数,时行插入排序,结果为19,8,92,96,85,88,当i=3时,条件不满足。

答案 C

2.小张编写程序,实现把数据temp插入到升序序列中,得到一个新的升序序列,原升序序列各元素已依次存放在数组元素a

(1)、a

(2)、a(3)、……、a(n)中。

他编写的VB程序段如下:

Iftemp>

=a(n)Then

a(n+1)=temp

j=n

DoWhilej>

=1Andtemp<

 ____①____

 j=j-1

 ____②____

要使程序实现上述功能,则方框①②中的语句分别是(  )

A.①a(j+1)=a(j) ②a(j+1)=temp

B.①a(j)=a(j-1) ②a(j+1)=temp

C.①a(j+1)=a(j) ②a(j)=temp

D.①a(j)=a(j-1) ②a(j)=temp

解析 如果满足条件temp<

a(j),应该把当前位置的数往后移动,即a(j+1)=a(j),当条件不满足时,temp已经大于或等于a(j),应放入j+1的位置。

答案 A

3.某VB程序段如下:

s=”Abc”

i=Len(s)

DoWhilei>

ch=Mid(s,i,1)

t=(Asc(ch)Mod32+4)Mod26

s1=s1+Chr(t+65)

i=i-1

Text1.Text=s1

该程序段执行后,在文本框Text1中显示的内容是(  )

A.HGFB.HgfC.FGHD.Fgh

解析 Asc(ch)Mod32是取出他在字母表中位置,且位置是从1-26,若要构成环,可以理解为Asc(ch)Mod32-1+5)Mod26,即后移5位。

从s的最后一个位置开始进行转换,转换后只有大写字母。

二、非选择题

4.对一段字符(仅包含大小写字母和数字)加密,加密规则为:

①字母和数字都往后循环顺移3位,如“a”变为“d”,“y”变为“b”;

“0”变为“3”,“7”变为“0”,②加密后字母在前,数字在后,③字母按逆序排列,数字按顺序排列,如输入明文“a1b7Z8x3”,密文为“aCed4016”。

(1)根据程序代码分析,“加密”按钮的名称是__________。

(2)根据加密规则,明文“9G78fbY5”,则密文为________。

(3)请在划线处填入合适的代码:

PrivateSubCom_jm_Click()

DimxAsString,chAsString,c1AsString

Dims1AsString,s2AsString,sAsString

DimiAsInteger,nAsInteger,yAsInteger

x=Text1.Text

n=Len(x)

Fori=1Ton

 ch=Mid(x,i,1)

 Ifch>

=”0”Andch<

=”9”Then

 ____①____

 s2=s2&

Str(y)

 ElseIfch>

=”a”Andch<

=”z”Then

 y=(Asc(ch)-Asc(”a”)+3)Mod26

 s1=c1+s1

 Else

 y=(Asc(ch)-Asc(”A”)+3)Mod26

c2=Chr(Asc(”A”)+y)

s1=c2+s1

____③____

Text2.Text=s

解析 s2连接的是数字串,0-6依次加3后的值为3-9,7-9加3后的值为10-12。

将10-12转换成0-2,可以用该数Mod10的方法。

答案 

(1)Com_jm 

(2)Beij2018 (3)①y=(Val(ch)+3)Mod10 ②c1=Chr(Asc(”a”)+y) ③s=s1+s2

5.小王编写了一个

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 党团工作 > 入党转正申请

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1