




已阅读5页,还剩16页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
一、字符处理11、算法说明 1) 加密解密最简单的加密方法是:将每个字母加一序数,例如5,这时:“A”F”,”a” ”f”,”B” ”G”,”b” ”g”Y” ”D”, ”y” ”d”,”Z” ”E”, ”z” ”e”解密是加密的逆操作。界面如下:代码如下:Word-WRAP: break-word bgColor=#f3f3f3以下是引用片段:OptionExplicit PrivateSubCommand1_Click() DimstrInput$,Code$,Record$,cAsString*1 Dimi%,length%,iAsc% strInput=Text1.Text length=Len(Trim(strInput) Code= Fori=1Tolength c=mid(strInput,i,1) SelectCasec CaseAToZ iAsc=Asc(c)+5 IfiAscAsc(Z)TheniAsc=iAsc-26 Code=Code&Chr(iAsc) CaseaToz iAsc=Asc(c)+5 IfiAscAsc(z)TheniAsc=iAsc-26 Code=Code&Chr(iAsc) CaseElse Code=Code&c EndSelect Nexti Text2.Text=Code EndSub PrivateSubCommand3_Click() Text1.Text= Text2.Text= Text3.Text= Text1.SetFocus EndSub2) 统计问题提出统计字符或者数字出现的次数。算法说明以字符统计为例,设基本问题如下:请统计一段文本中英文字母在文本中出现的次数。(不区分大小写)如:I am a student.得到:A:2 d:1 e:1 I:1 m:1 n:1 s:1 t:2 u:1分析:由于不区分大小写,因此可定义一个大小为26(下标:0-25)的数组,每个元素依次记录A、B、CZ字母出现的次数。A(0)存放字母a出现的次数A(1)存放字母b出现的次数A(2)存放字母c出现的次数A(3)存放字母d出现的次数譬如:aabdc代码如下:以下是引用片段:OptionExplicit PrivateSubCommand1_Click() DimiAsInteger,jAsInteger Dimzimu(25)AsInteger DimallStrAsString DimaStrAsString allStr=UCase(Text1.Text) Fori=1ToLen(Text1.Text) aStr=Mid(allStr,i,1) IfaStr=AAndaStr=ZThen zimu(Asc(aStr)-Asc(A)=zimu(Asc(aStr)-Asc(A)+1 EndIf Nexti Fori=0To25 Ifzimu(i)0Then j=j+1 Text2.Text=Text2.Text&Chr(i+Asc(A)&:&str(zimu(i)& IfjMod5=0ThenText2.Text=Text2.Text&Chr(13)&Chr(10) EndIf Nexti EndSub解题技巧熟练运用字符处理函数,对于一些数论题,譬如逆序数等也可将数字通过CStr函数转换为字符后,利用字符处理函数来解题。2、实战练习 1) 补充代码(2003秋二(8)下面程序的功能是统计文件中英文字母(不区分大小写)出现的个数。Word-WRAP: break-word bgColor=#f3f3f3以下是引用片段:OptionBase1 PrivateSubCommand1_Click() Dimalpha(26)AsInteger,nAsInteger DimiAsInteger,sAsString Openc:kav2003readme.txtForInputAs#11 DoWhileNotEOF(11) s=(1) s=UCase(s) Ifs=AAnds=ZThen n=(2) alpha(n)=alpha(n)+1 EndIf Loop Fori=1To26 Ifalpha(i)0Then List1.AddItemChr(i+64)&:&CStr(alpha(i) EndIf Nexti Close EndSub2) 补充代码(2000秋二(6)下面程序的功能是:统计当前盘当前文件夹中的顺序文件data.txt中共有多少个单词,约定连续出现的字母定义为一个单词。以下是引用片段:OptionExplicit PrivateSubForm_Click() DimChar()AsString,StAsString,TemAsString DimIdxAsInteger,JsAsLong,FlenAsLong DimFAsBoolean,WAsString*1 (1) Flen=LOF(10) St=Input(Flen,#10) Js=1 DoWhileJs以下是引用片段:PrivateSubCommand1_Click() Dimn%,i% x=1第七天桃子数 Print第七天桃子数:1只 Fori=6To1Step-1 x=(x+1)*2 Print第&i&天桃子数:&x&只 Nexti EndSub穷举法又称枚举法,即将所有可能情况一一测试,判断是否满足条件,一般用循环实现。问题:百元买鸡问题。假定小鸡每只5角;公鸡每只2元;母鸡每只3元。现在有100元,要求买100只鸡,编程列出所有可能的购鸡方案。分析:设母鸡、公鸡、小鸡分别x、y、z只,则有:x+y+z=1003x+2y+0.5z=100程序一:以下是引用片段:PrivateSubCommand1_Click() Dimx%,y%,z% Forx=0To100 Fory=0To100 Forz=0To100 Ifx+y+z=100And3*x+2*y+0.5*z=100Then Printx,y,z EndIf Nextz Nexty Nextx EndSub程序二(优化)以下是引用片段:PrivateSubCommand1_Click() Dimx%,y% Forx=0To33 Fory=0To50 If3*x+2*y+0.5*(100-x-y)=100Then Printx,y,100-x-y EndIf Nexty Nextx EndSub2) 高等数学求积分近似计算积分:s=13(x3+2x+5)dx代码如下:以下是引用片段:PublicFunctionf(ByValx!)被积函数 f=x*(x*x+2)+5 EndFunction PublicFunctiontrapez(ByVala!,ByValb!,ByValn%)AsSingle b、a分别为积分上下限,n为等分数 Dimsum!,h!,x! h=(b-a)/n sum=(f(a)+f(b)/2 Fori=1Ton-1 x=a+i*h sum=sum+f(x) Nexti trapez=sum*h EndFunction调用:以下是引用片段:PrivateSubCommand1_Click() Printtrapez(1,3,30) EndSub数论综合题此类题目比较广泛,必须给以足够重视。历年题目有:平方数、零巧数、拟互满数、回文数、酉完数、完数、幸运数、逆序数以及无暇素数、超级素数、因子和等。排序21) 补充代码(2002秋二(10)找出由两个不同数字组成的平方数,并将结果按图中的格式显示在列表框 List1中。Word-WRAP: break-word bgColor=#f3f3f3以下是引用片段:OptionExplicit PrivateSubCommand1_Click() DimIAsLong,NAsLong ForI=11To300 (1) IfVerify(N)Then (2) EndIf NextI EndSub PrivateFunctionVerify(3)AsBoolean DimA(0To9)AsInteger,IAsInteger,JsAsInteger DoWhileN0 (4) N=N10 Loop ForI=0To9 Js=Js+A(I) NextI (5) EndFunction1) 编程题(2004秋上机试卷08)一个正整数被称为奇妙平方数,如果此数的平方与它的逆序数的平方互为逆序数。例如,122=144, 212=441,12 与 21 互逆 ,144 与 441 互逆 ,12 就是奇妙平方数。找出 1-300 以内所有的奇妙平方数。1、算法说明 1) 顺序查找逐个元素找,如果有,则记录位置,然后跳出循环;否则,查找失败。代码如下:Word-WRAP: break-word bgColor=#f3f3f3以下是引用片段:PrivateSubSearch(a(),ByValKey,IndexAsInteger) Dimi% Fori=LBound(a)ToUBound(a) Ifa(i)=KeyThen找到,将元素下标保存在index中并结束查找 Index=i ExitSub EndIf Nexti Index=-1若没找到,则index值为-1 EndSub2) 二分法查找顺序查找效率低下,当数组有序排列时,可以使用二分法查找提高效率。算法思想:代码如下:以下是引用片段:PrivateSubbirSearch(a(),ByVallow%,ByValhigh%,ByValKey,index%) DimmidAsInteger IflowhighThen没有查找到 index=-1 ExitSub EndIf mid=(low+high)2取查找区间的中点 IfKey=a(mid)Then查找到,返回下标 index=mid ExitSub ElseIfKey以下是引用片段:OptionExplicit OptionBase1 PrivateSubForm_click() Dimstu()AsString,glass()AsString,iAsInteger DimnAsInteger,nameAsString,kAsInteger Openc:stustu.txtForInputAs#11 DoWhile(1) (2) ReDimPreservestu(n),glass(n) Input#11,stu(n),glass(n) Loop name=InputBox(输入欲查找的学生姓名:) Callsearch(name,stu,k) Ifk以下是引用片段:PrivateSubCommand1_Click() Dima(10)AsInteger DimiAsInteger,kAsInteger Fori=0To9生成数组 a(i)=i*3+1 Printa(i); Nexti Print Print插入14 Fork=0To9查找插入14在数组中的位置 If14以下是引用片段:OptionExplict PrivateSubForm_Click() DimA(10)AsInteger,iAsInteger,JAsInteger Openc:Data4.txtForInputAs#12 Do(1) J=J+1 Input#12,A(J) Loop CallInsert(A) Fori=1To10 PrintA(i); Nexti Print Close#12 EndSub PrivateSubInsert(A()AsInteger) DimiAsInteger,PutpAsInteger,JAsInteger DimGetpAsInteger,NAsInteger,TemAsInteger N=UBound(A)/2 Putp=1 Getp=N+1 Fori=1ToN Tem=A(Getp) ForJ=GetpToPutp+1Step-1 (2) NextJ A(Putp)=Tem Getp=Getp+1 Putp=(3) Nexti EndSub补充代码下面程序得功能是将无序数组中相同得数只保留一个,其余得删除,并输出经过删除后的数组元素,删除相同数是通过将该数组元素后面的元素在数组内依次前移替换前一个元素的值实现的。数组各元素的值从文件data.txt中读取。 以下是引用片段:OptionExplict OptionBase1 PrivateSubForm_Click() DimIAsInteger,JAsInteger,KAsInteger DimA()AsInteger,TAsInteger,MAsInteger Openc:mydocuments2000testdata.txtForInputAs#1 DoWhile(1) I=I+1 RedimPreserveA(I) Input#1,A(I) Loop M=1:T=(2) DoWhileM I=M+1 DoWhileI以下是引用片段:OptionBase1 PrivateSubCommand1_Click() Dima(10)AsInteger,iAsInteger Fori=1To10 a(i)=Int(Rnd*10)+1 Text1=Text1&Str(a(i) Nexti Callshaker_sort(a) Fori=1To10 Text2=Text2&Str(a(i) Nexti EndSub PrivateSubShaker_sort(k()AsInteger) DimiAsInteger,cAsInteger,dAsInteger DimtAsInteger c=1 d=(1) Do For(2)Step-1 Ifk(i=1)k(i)Then t=k(i-1):k(i-1)=k(i):k(i)=t EndIf Nexti (3) Fori=c+1Tod If(4)Then t=k(i-1):k(i-1)=k(i):k(i)=t EndIf Nexti d=d-1 LoopWhile(5) EndSub2) 编程题把文本框输入的字符串按降序添加到列表框中。约数因子1、算法说明 1) 最大公约数:用辗转相除法求两自然数m、n的最大公约数。(1) 首先,对于已知两数m、n,比较并使得mn;(2) m除以n得余数r;(3) 若r=0,则n为求得的最大公约数,算法结束;否则执行步骤(4)(4) mn nr 再重复执行(2)譬如: 10与5分析步骤: m=10 n=5r=m mod n=0所以n(n=5)为最大公约数24与9分析步骤: Word-WRAP: break-word bgColor=#f3f3f3以下是引用片段: m=24n=9 r=mmodn=6 r0m=9n=6 r=mmodn=3 r0m=6n=3 r=mmodn=0所以n(n=3)为最大公约数算法实现循环实现以下是引用片段:PrivateFunctionGCD(ByValmAsLong,ByValnAsLong)AsLong DimtempAsLong IfmnThentemp=m:m=n:n=temp DimrAsLong Do r=mModn Ifr=0ThenExitDo m=n n=r Loop GCD=n EndFunction递归实现以下是引用片段:PrivateFunctionGCD(ByValmAsLong,ByValnAsLong)AsLong DimtempAsLong Ifm以下是引用片段:OptionExplicit PrivateFunctiongcd(1)AsInteger DimrAsInteger r=mModn Ifr=0Then gcd=n Else m=n:n=r (2) EndIf EndFunction PrivateSubCommand1_Click() DimnAsInteger,pAsInteger n=Val(Text1) Forp=n-1To2Step-1 If(3)ThenList1.AddItemp Nextp EndSub2) 编程题生成一个三行八列的二维数组A(3,8),其中前两行元素产生的方法是:用初值X1=26及公式Xi+1=(25Xi+357) Mod 1024,产生一个数列:X1、X2、.、X16 。其中X1X8作为A的第一行元素;X9X16作为A的第二行元素;A的第三行元素值取前两行同列元素的最大公约数。最后按图示格式显示在图片框中。进制转化11、算法说明 1) 十进制正整数m转换为R(2-16)进制的字符串。思路: 将m不断除r取余数,直到商为0,将余数反序即得到结果。算法实现:Word-WRAP: break-word bgColor=#f3f3f3以下是引用片段:PrivateFunctionTran(ByValmAsInteger,ByValrAsInteger)AsString DimStrDtoRAsString,nAsInteger DoWhilemo n=mModr m=mr Ifn9Then StrDtoR=Chr(65+n-10)&StrDtoR Else StrDtoR=n&StrDtoR EndIf Loop Tran=StrDtoR EndFunction2) R(2-16)进制字符串转换为十进制正整数。思路:R进制数每位数字乘以权值之和即为十进制数。算法实现:以下是引用片段:PrivateFunctionTran(ByValsAsString,ByValrAsInteger)Asinteger DimnAsInteger,decAsInteger s=UCase(Trim(s) Fori%=1ToLen(s) IfMid(s,i,1)=AThen n=Asc(Mid(s,i,1)-Asc(A)+10 Else n=Val(Mid(s,i,1) EndIf dec=dec+n*r(Len(s)-i) Nexti Tran=dec EndFunction解题技巧进制转化的原理要清楚,同时编写代码时候要留意16进制中的A-F字符的处理。2、实战练习 1) 补充代码
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 农田服务采购合同样本
- 劳务用工协议合同标准文本
- 养鸭保价合同样本
- 人防标牌制作合同标准文本
- 传媒公司合同标准文本
- 加盟续签合同样本
- 制作内衣售卖合同标准文本
- 临时劳务合同样本
- 加工合同范例简短
- 出售吉祥公寓合同样本
- 新型(花篮螺栓)工字钢悬挑梁脚手架讲解
- 雨季及防汛施工安全教育
- 函数的极值与最大(小)值(第二课时)【高效备课精研+知识精讲提升】 高二数学 课件(人教A版2019选择性必修第二册)
- 中华优秀传统文化的内涵与特点【考点精研+知识架构+提分专练】高中历史统编版(2019)选择性必修三文化交流与传播
- 光伏工程强条执行记录表
- GB/T 34855-2017洗手液
- GB/T 26358-2010旅游度假区等级划分
- 《轮轴的秘密》教学课件
- GB/T 1094.11-2022电力变压器第11部分:干式变压器
- GB 15892-2009生活饮用水用聚氯化铝
- 紧张的考试作文5篇范文
评论
0/150
提交评论