




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、 /59备注:试卷难度评价采取五级评价体系,分基础、容易、一般、稍难、难五个等级,其中的一、二、三级都属于程序设计的基础试卷级别,同学们稍加思考均有能力求得正确解答,对于四级试卷属于程序设计试卷基础级别的思考题,五级难度试卷在此没有涉及,在程序设计高级试卷中另行讲解。对于基础和容易两个级别的程序设计试卷,若能够给出语句分类如f条件语句、条件语句嵌套、循环语句、多重循环语句等)的将尽量给出。若属于13大类别的将尽量标注。)程序设计试卷几大分类:1、素数类问题求素数的几种算法):2、数据排序问题数据排序的几种方法):3、最大公约数和最小公倍数问题几种算法):4、公式求解类问题如求圆周率n、自然常数
2、e、解方程等等):5、编号相反处理问题:6、约瑟夫问题或猴子选大王问题、密码问题):7、回文数问题:8、高精度数值计算问题:9、数值计算问题:10、进制相互转换问题:11、字符串倒置问题:12、排列与组合类问题:13、因子、质因子质因数)类相关问题:答案部分:程序设计的源程序没有统一的标准答案,实现程序的算法也是多种多样,但结果是唯一的,算法也有优劣之分,一个程序的优劣,关键在于是否找到了好的算法,以下程序和算法不一定就是最佳算法和最佳程序,只能仅供参考,希望同学们能够对某些程序提出更好的算法来改进程序)经常碰到的判断是否为素数、是否为回文数、求两个数的最大公约数、求两个数的最小公倍数等问题的
3、子函数源程序,请务必记住!)判断是否为素数,若是素数则返回true若不是素数则返回falsefunctionprime(x:longint:booleanvarj,y:longintbeginprime:=trueifxforj:=2toydoif(xmodj=0thenbeginprime:二fas。end备注:1一100之间所有的素数:2、59、end。)1、求梯形的面积。梯形面积公式:S2h(ab)3、5、7、11、13、17、19、23、29、31、37、41、43、47、53、61、67、71、73、79、83、89、97。共25个)判断是否为回文数,若是回文数则返回true若不是回
4、文数则返回falsefunctionhuiwen(n:longint:booleanvarm,i,j:longinta:egerbeginifn:=faliSeendm:=ni:=0huiwen:二truerepeati:=i+1ai:=mmo。10m:=mdiv10until。二0forj:=1to(idiv2doifajai-j+1thenbeginhuiwen:=falexiten。end求最大公约数子函数,返回两个正整数的最大公约数,采用辗转相除法算法;functiongcd(a,b:longint:longintbeginifb=0thengcd:=ae
5、lsegcd:=gcd(b,amodbend求最小公倍数:lcm=a*bdivgcd(a,。以下程序设计试卷来自奥赛经典语言篇)第2章基本语句与程序结构例题部分:bvb24ac,测试数据2、求一兀二次方程ax2+bx+C=0的两个实根。求根公式:x1,2,测试数据a=1,b=-5,c=6;答案:X=2、x2=3)2/59 /59)3、输入一个三位的自然数,然后把这个数的百位与个位对调,输出对调后的结果。4、输入三个数a、b、c,首先判断这三个数能否构成三角形,若能,则求出三角形的面积。提示:海伦公式S(da)db)dc),其中da2C,a、b、c为边长),If条件语句,测试数据a=5,b=6,
6、c=7;答案:14.7)5、从键盘读入三个数,按从大到小的顺序把它们打印出来。,If条件语句)6、输入三角形的三边,判断它是否是直角三角形。,If条件语句,测试数据3、4、5;4、5、6;答案Yes:No)7、编写一个根据用户键入的两个操作数和一个运算符,由计算机输出运算结果的程序。)8、输入一个年号,判断它是否为闰年。,If条件语句,测试数据1900;2000;2008;答案:No;Yes:Yes)9、编程计算S=1+2+3+100。,循环语句,答案:5050)相关练习:1)S123100;2)S12221002;TOC o 1-5 h z3)S246100;4.)S14710100相关练习
7、答案:1)5.19保留2为小数);2)338350;3)2550;writeln(sqrt(6*send.11、计算n!。n!=1x2x3xxn,取n=10),循环语句,10!=3628800)12、已知一对兔子,每个月可以生一对小兔,而小兔过一个月后也可生一对小兔。即兔子的对数是:第一个月1对,第二个月2对,第三个月3对,第四个月5对,假设兔子的生育期是12个月,并且不死,问一年后,这对兔子有多少对活着的后代?Fibonacci数列问题),循环语句,1、2、3、5、8、13、21、34、55、89、144、233;答案233)13、求两个整数a与b的最大公约数和最小公倍数。,循环语句、If条
8、件语句,测试数据16和24,最大公约数8,最小公倍数48)11114、利用格利高公式求兀。1,直到最后一项的值小于10-6为止。4357,循环语句)答案:3.1415946569E+00)programe2_32。varn,fh:longints,t,p:/ealbeginwritelnn:=1s:=0t:=1fh:=1while(abs(t=1e-6dobegint:ifh/n:=s+tn:二n+lfh:=-fhen。p:=4*swriteln(pi=,pend.111相关练习:利用公式,求n。81357911计算前10000项时,答案为3.1415426536)programe。vara,
9、b:loniintx,s:rialbeginwritelns:=0fori:=1to10000dobegina:=(4bi-34*i1s:=s+1/(a*Jbenlwriteln(8*lsend.15、求100一999中的水仙花数。若三位数ABC,ABC=A3+B3+C3,则称ABC为水仙花数。例如153,13+53+33=153,贝则153是水仙花数。),循环语句)答案:153、370、371、407)programe12lvari,a,b,c:inltegerbeginwritellnfori:=100to999dobegina:=idilv100b:=(imod100dliv10c:=i
10、mod10。ifi=a*a*a+b*b*b+c*c*cthenwrite(i:8。end。end.16、试编写能够打印输出如下图形的程序。,循环语句)AAAAAAAAAAAAAAAAAAAAAAAAAprograme。constn=5。vari,j:integer。beginwriteln。fori:=1tondobeginwrite(:i。forj:=1to(n-i*2+1dowrite(A。writeln。end。end.17、四个学生上地理课,回答我国四大淡水湖大小时这样说:)甲:“最大洞庭湖,最小洪泽湖,鄱阳湖第三。”乙:“最大洪泽湖,最小洞庭湖,鄱阳湖第二,太湖第三。”丙:“最小洪泽
11、湖,洞庭湖第三。”丁:“最大鄱阳湖,最小太湖,洪泽湖第二,洞庭湖第三。”对于每个湖的大小,每个学生仅答对一个,请编程确定四个湖的大小。)习题部分:1、已知三角形的两边a、b和夹角jc的值,求第三边已知条件由键盘输入)。提示:余角公式c2二a2+b2-2abcosc)测试数据:输入a=3、b=4、jc=90;输出5)programe2_5。vara,b,c,jc:real。beginwriteln(inputa,b,jc:。readln(a,b,jc。c:=sqrt(a*a+b*b-2*a*b*cos(pi*jc/180。writeln(c:8:2。end.2、编写程序把一个四位整数3581颠倒
12、成1853。mod10。c:=(ndiv100mod10。d:=ndiv1000。writeln(a,b,c,d。end.相关练习:任意输入一个正整数,颠倒输出该数。programe。varn:longint。beginwriteln。writeln(inputaintegernumber:。readln(n。repeatwrite(nmod10。n:=ndiv10。untiln=0。end.3、输入a、b、c三个数,打印出最大者。readln(a,b,c。if(aband(acthenwriteln(a。elseif(baand(bcthenwriteln(b。elsewriteln(c。e
13、nd.4、从键盘读入两个数,比较其大小,把大数置于x,小数置于y。请设计实现该功能的程序。,If条件语句)程序略)5、输入三个数,判断以这三个数为边能否组成一个三角形。若不能,则给出适当信息;若能,则进一步判断它们构的是锐角三角形、直角三角形还是钝角三角形,并输出其特征等边、等腰、直角、一般)、求其面积。,If条件语句)算法分析:对于判断是锐角、直角、还是钝角三角形,只需判断最大边的平方与其余两边的平方和的大小比较即可,小于则为锐角、等于则为直角、大于则为钝角。)。readln(a,b,c。ifabthenbegint:=a。a:=b。b:=t。end。ifacthenbegint:=a。a:
14、=c。c:=t。end。if(athenbeginif(a*athenwriteln(ruijiaosanjiaoxing.elseif(a*a=b*b+c*cthenwriteln(zhijiaosanjiaoxing.elsewriteln(dunjiaosanjiaoxing.。if(a=band(b=cand(c=athenwriteln(dengbiansanjiaoxing.elseif(a=band(bcor(a=cand(cbor(b=cand(cathenwriteln(dengyaosanjiaoxing.elseif(a*ab*b+c*cthenwriteln(yiban
15、sanjiaoxing.。d:=(a+b+c/2。s:=sqrt(d*(d-a*(d-b*(d-c。writeln(s=,s:0:2。endelsewriteln(NO!。end.6、设我国目前的人口为11亿,且每年的增长率为1.5。问多少年后,我国的人口会翻一番?)答案:47)programe2_22。vari:integer。s:real。beginwriteln。s:=11。i:=0。whiles。inc(i。end。writeln(i。end.7、Fibonacci数列问题:数列的头两个数分别是0和1,从第三个数开始,每个数皆为它的前两个数之和,即:0,1,1,2,3,5,,输出该数列
16、的第50个数。,循环语句)。fori:=3to50dobeginz:=x+y。write(z:20:0。x:=y。y:=z。end。end.8、编写程序求出下式中n的最大值:22+42+62n2vl500。,循环语 /59句)答案:18)programe2_24。varn,s:integer。beginwriteln。s:=0。n:=0。whilesl500dobegininc(n,2。inc(s,n*n。end。writeln(n-2。end.9、把一元的钞票换成一分、二分和五分的硬币每种至少一枚),问有多少种兑换方法?)答案:461)programe2_29。vari,j,k,ans:in
17、teger。beginans:=0。fork:=ltol9doforj:=lto47dofori:=lto93doif(k*5+j*2+i=l00theninc(ans。writeln(ans。end.10、编写程序求最小正整数m、nvOvnvm)为何值时,1989m与1989n的最后三位数字相同?)算法:这类数字很大且有效数字位数很多超出最多有效位数extended数据类型有效数字18位)的数字问题,一定要另辟蹊径寻找突破口,注意到此题只要求最后三位数字相同,则我最多保留最后四位有效数字即可进行判断。还请记住这样一个事实,如1989x1989=3956121,395612仆1989=7868
18、724669,最后四位数字是“4669”,而我把3956121取其最后的四位数“6121”与1989相乘即6121x1989=12174669,最后四位数字也是“4669”,没有破坏最后四位有效数字的值,因此可以通过这种方法来编写此程序。) /59答案:m=51;n=1);programe。varm,n,i,j:integer。x,y,a,b:longint。beginwriteln。form:=2to60doforn:=1tom-1dobeginx:=1。y:=1。fori:=1tomdobeginx:=xmod10000。x:=x*1989。a:=xmod1000。end。forj:=1t
19、ondobeginy:=ymod10000。y:=y*1989。b:=ymod1000。end。ifa=bthenwriteln(m=,m,n=,n。end。end.11、编写程序提示用户输入一系列整数,用0作结束标志,统计其中有多少个正数。)programe。varcount,x:integer。beginwriteln。writeln(inputintegernumber(0-end:。count:=0。repeatread(x。ifx0theninc(count。until(x=0。writeln(count=,count。end.111112、求自然常数e=+不+的值。提示:0!=1,
20、1!=1)0!1!2!n!)直到第50项;2)直到最后一项小于105。答案:1)2.71828182845905E+0000;2)2.71828152557319E+0000)备注:第2小问程序略,只须将更改语句“until(1/sv1E-5。”即可求的解答)programe2_35。$N+vari,count:integer。e,s:extended。begine:=1。count:=0。repeatinc(count。s:=1。fori:=1tocountdos:=s*i。e:=e+1/s。untilcount=50。writeln(e。end.13、三齐王点兵的故事。相传三齐王韩信才智过
21、人,从不直接清点自己军队的人数,只是让士兵先后以三人一排、五人一排、七人一排地变换队形,而他每次只掠一眼队伍的排尾就知道总人数了不超过100人)。输入三次排尾的人数,输出总人数。,p5(04,p7(06deweishu:。readln(a,b,c。fori:=100downto1doif(imod3=aand(imod5=band(imod7=cthenwriteln(i。ifi=1thenwriteln(Noanswer!。end.14、编写程序,计算N!以十进制数形式表示的数中最右的非零数字,并找出在它右边有几个零。例如12!=1X2X3X-X12=479001600o因此12!的右边有2
22、个零。)提示:碰到5、52、53、54才会出现末尾是零,所以1000!末尾零的个数为:1000div5)+v1000div52)+v1000div53)+v1000div54)=249)下面的程序没采用上面的算法,采取另一种算法实现了这一程序,显然上面的算法效率高)程序算法:只需提供末尾几位有效数字即可,我采取提供四位有效数字相乘)programI_11ovars:longintoi,d:integerobeginwritelnod:=0os:=1ofori:=1to1000dobegins:=s*ioif(smod1000=0thenbegins:=sdiv1000od:=d+3oendoi
23、f(smod100=0thenbegins:=sdiv100od:=d+2oendoif(smod10=0thenbegins:=sdiv10od:=d+1oendos:=smod10000oendowritelnowrite(doend.15、。以此类推共26层。)ABAABCBAprograme2_40ovari,j:integerobeginwriteln。fori:=1to26dobeginforj:=1to26-idowrite(。forj:=1toidowrite(chr(64+j。forj:=i-1downto1dowrite(chr(64+j。writeln。end。end.第
24、4章数组类型例题部分:1、输入10个整数,把这10个数按从小到大的顺序排列。)冒泡法排序和选择法排序两种方法)冒泡法排序:programe1。constn=10。vara:array1.10ofinteger。i,j,t:integer。beginwriteln(input,n,integernumber:。fori:=1tondoread(ai。fori:=1ton-1doforj:=1ton-idoifajaj+1thenbegint:=aj。aj:=aj+1。aj+1:=t。end。fori:=1tondowrite(ai:5。end.2、折半查找。二分法查找)3、旅馆里有一百个房间,从
25、1到100编了号。第一个服务员把所有的房间门都打开了,第二个服务员把所有编号是2的倍数的房间“相反处理”,第三个服务员把所有编号是3的倍数的房间作“相反处理”,以后每个服务员都是如此。问第100个服务员来过后,哪几扇门是打开的。所谓“相反处理”是:原来开着的门关上,原来关上的门打开。)提示:对于任何一个编号,例如8,它的因子只有1、2、4、8,并且成对出现,当此数的因子数为偶数个时将被关上,当此数的因子数为奇数个时才会被打开。考虑到因子成对出现的情况,因此只有平方数的因子是奇数个的,所以门被打开的只能是平方数的房间,如1,4等)4、编写程序把任意十进制整数转换成二进制整数。)5、所谓“幻方”,
26、是一个行、列为奇数的方阵,把1n2这n2个不同的数放入方阵中,使方阵的每行、每列和每个对角线上的元素的和全部相等。下面给出幻方的一种排列方法:(1)先把1放在第一行的中间位置;(2)下一个数放在上一个数的右上方;(3)若右上方已超出方阵的第一行,则下一个数放在下一列的最后一行上;(4)若右上方已超出方阵的最后一列,则下一个数放在上一行的第一列上;(5)若右上方已经有数,或右上方已超出方阵的第一行最后一列,则下一个数放在上一个数的正下方。编写程序,对输入小于15的n,打印出相应的幻方。)6、在一个字符数组LET中形成由A开始的连续26个大写字母构成的字串,并将其倒置后仍放在LET中。7、随机输入
27、一个长度不超过255的字符串,将其倒置后输出。8、随机输入一些国家的英文名字,以end作为输入结束标志,按字母顺序排序后输出。9、求n个字符串的最长公共子串,nv20,字符长度不超过255。例如n=3,由键盘依次输入三个字符串为:whatislocalbus?Namesomelocalbus.LocalbusishighspeedI/Obusclosetotheprocessor.则最长公共子串为“localbus”。10、文本的整版。编写一个程序,从键盘以任意的方法输入句子,然后打印出来。打印时每行宽度必须为n个字符。如果一行的最后一个单词超出了本行n个字符的范围,则应把它移到下一行去。输入
28、一个句子测试你的程序。习题部分:1、输入n个整数,请找出最小数所在的位置,并把它与第一个数对调。fori:=1to10doread(ai。t:=a1。fori:=2to10doifai。ai:=a1。a1:=t。end。fori:=1to10dowrite(ai:8。end.2、用边排序边合并的方法把两个有序数列合并为一个新的有序数列,不得先合并再重新排序。:。fori:=lto5doforj:=lto5doread(ai,j。fori:=lto5dobeginminx:=ai,l。x:=i。y:=l。forj:=lto5doifai,jminxthenbeginminx:=ai,j。y:=j
29、。end。forj:=lto5doifaj,y。end。end.第5章过程与函数例题部分:1、编程求:1!+3!+5!+7!+9!+11!。2、求数字的乘积根。一个正整数的数字的乘积N的定义是:这个整数中非零数字的乘积。例如,整数999的数字乘积为9X9X9,即729。729的数字乘积为7X2X9,即卩126。126的数字乘积为1X2X6,即12。12的数字乘积为1X2,即2。一个正整数的数字乘积根N是这样得到的:反复取该整数的数字乘积,直到得到一位数字为止。例如,在上面的例子中数字的乘积根是2。编写一个程序,输入一个正整数长度不超过200位数字),输出计算其数字乘积根的每一步结果。3、汉诺H
30、anoi)塔问题。设有n个大小不等的中空圆盘,按照从小到大尺寸和序号)的顺序叠套在立柱A上。另有两根立柱B和C,如图所示。问题要求把全部圆盘从A柱源柱)移到C柱目标柱)。移动过程中可借助B柱中间柱)。移动时有如下要求:(1)一次只能移动一个圆盘;(2)不允许把大盘放在小盘上边;4、5、6、(3)可使用任意一根立柱暂存圆盘。把一个十进制整数转化为K进制数KW10)。八皇后问题:把八个皇后摆在8X8国际象棋棋盘格子内,使它们互不捕获对方。换言之,在任何一行、一列或一条对角线上,仅能放置一个皇后。这一问题是由19世纪著名数学家高斯vGauss)于1850年首先提出的。答案共有92种解答)已知:切比雪
31、夫多项式如下:提示:运用递归函数计算)1(n二0)n(n二1)(n2)2)称为e数列,2.)每一个en)n=1,2,)称为e数。求1,30000之内:(1)最大的e数;2)e数的数目。*a+(n-1*b。a:=b。b:=c。inc(n。untilc30000。writeln(maxe=,a,count=,n-2。end.计算并输出:S-穷01之值精确到小数点后第5位)。ix(i+1)i-1)。end。writeln(s:0:5。end.3.F(0)-F(1)-F(2)-1F(N)-F(N-1)-2F(N-2)+F(N-3)(N2)求:)(1)F50);2)F0)+F1)+F50)。end。wr
32、iteln。writeln(s=,s。end.4.求满足:AB=716699并且A+B最小两个条件的A和B。 /59)。fora:=1toxdoif(716699moda=0and(a+(716699divathenbegins:=a+(716699diva。mina:=a。minb:=(716699diva。end。writeln(A=,mina,B=,minb。end.5.一自然数平方的末几位与该数相同时,称此数为自同构数。例如,由于52=25,则称5为自同构数。求出1,700以内的:1)最大的自同构数;2)自同构数数目。)mod10=0theninc(count。fori:=10to99
33、doif(i*i-imod100=0theninc(count。fori:=100to700doif(i*i-imod1000=0thenbegininc(count。write(i:8。end。writeln。writeln(count=,count。end.6.若某不含数字0的三位正整数,其平方数至少有三位同样的数字,则称该三位数为三重数。例如,由于:5112=261121有三位1),所以511为三重数。求出:)1)按升序排列第10个三重数;2)按升序排列前10个三重数之和;答案:1)258;mod10。c:=imod10。if(a0and(b0and(c0thenbeginx:=i*i。
34、aa1:=xdiv10000。aa2:=(xdiv1000mod10。aa3:=(xdiv100mod10。aa4:=(xdiv10mod10。aa5:=xmod10。forj:=1to3dobeginn:=1。fork:=j+1to5doifaaj=aakthenn:=n+1。ifn2thenbeginwriteln(i:8,x:8。s:=s+i。count:=count+1。break。end。end。end。ifcount=10thenbreak。end。writeln(s:8。end.满足下列两个条件:va)千位数字与百位数字相同非0),十位数字与个位数字相同;vb)是某两位数的平方。
35、的四位正整数称为四位平方数。例如,由于:7744=882,则称7744为四位平方数。求出:1)所有四位平方数的数目;2)所有四位平方数之和。)分析:最小四位数1000是31.6的平方,最大的四位数9999是99.9的平方)=(xdiv100mod10and(xdiv10mod10=(xmod10thenbegininc(count。s:=s+x。end。end。writeln(count=,count,s=,s。end.其平方等于某两个正整数平方之和的正整数称为弦数。例如,由于3242=52,因此5为弦数。求121,130之间:1)弦数数目;2)最小的弦数;3)最大的弦数。)(分析:设a2+b
36、2二C2,且ab,这样可以控制出现重复弦数。forj:=1toxdobegink:=trunc(sqrt(i*i-j*j。if(i*i=j*j+k*kthenbegininc(count。writeln(i,*,i,=,j,*,j,+,k,*,k。break。end。end。end。writeln(count=,count。end.求满足以下三个条件:a)X2+Y2+Z2=512;b)X+Y+Z之值最大;c)X最小。的一组X、Y、Z的值。)。m:=trunc(sqrt(51*51-1*1/2。maxs:=0。minx:=51。forx:=ndownto1dofory:=xtomdobeginz
37、:=trunc(sqrt(51*51-x*x-y*y。if(zyand(x*x+y*y+z*z=51*51thenif(x+y+zmaxsor(x+y+z=maxsthenbeginmaxs:=x+y+z。xx:=x。yy:=y。zz:=z。end。end。writeln(x=,xx,y=,yy,z=,zz。end.eaxe-axx+a计算Y2sin(x+a)+ajn精度10Fa=0.1、x=1.0)。)-exp(-a*x/2*sin(x+a+a*ln(x+a/2。writeln(y:0:4。end.倒勾股数是满足下列公式:-+=BC)的一组3个)整数A、B、C),例如A2B2C2111 /5
38、9156,65,60)是倒勾股数,因为+=。问:1562652602)1)A、B、C之和小于100的倒勾股数有多少组?2)满足1)的诸组中,A、B、C之和最小的是哪组?提示:把公式转化为A2B2=C2vA2+B2)and(a+b+cthenbegininc(count。if(a+b+cthenbeginmins:=a+b+c。mina:=a。minb:=b。minc:=c。end。end。writeln(count=,count,a=,mina,b=,minb,c=,minc。end.设有十进制数字a、b、c、d、e,求在满足下列式子:abcdXe=dcbaa非0,e非0非1)的四位数abcd
39、中,求满足条件的最小的abcd和与之对应的e。)thenbeginwriteln(x:8,e:8。exit。end。end。end.求方程:x3-3x+1二0在区间0,1)内的解,精度为10f)thenwriteln(x:0:4。x:=x+0.0001。untilx=1。end.按递增顺序产生序列M中最小的80个数。M定义如下:数1属于M;若x属于M,则y=2x+l,z=3x+1也属于M,并求:)(1)该序列第50个元素之值;2)该序列前50个元素之和。答案:1)172;2)3853)programe。vari,j,k,t,p,n:longint。a:array1.100oflongint。b
40、eginwriteln。p:=1。ap:=1。n:=1。whilepaj+1thenbegint:=aj。aj:=aj+1。aj+1:=t。end。p:=p+1。end。writeln(ap:8。end.在n个一连串的方格内填写字母A或B,但相邻两格内不能都填B。求所有可能的填写方案数。例如,当n=3,可能的方案有AAA、AAB、ABA、BAA、BAB等5种。试求:1)当n=15时,所有可能的方案数是多少?2)当n=10时,包含有8个字母A的方案数共有多少?)提示:此题可以采用进制转换来解决。考虑到只包含了A与B两个字母,我们可以用二进制的0和1来代替,所以当全部是A时最小,此数为0,当全部是
41、B时最大为2n-1,我们让变量从021循环,然后将此数转换为相应的二进制数存储在数组中即可进行判断了。)答案:1)1597;。readln(n。s:=1。count:=0。fori:=1tondos:=s*2。fori:=0tos-1dobeginm:=i。forj:=1tondobeginaj:=mmod2。m:=mdiv2。end。flag:=true。forj:=1ton-1doif(aj=1and(aj+1=1thenbeginflag:=false。break。end。ifflag=truethencount:=count+1。end。writeln(gra
42、me。varn,m,s,i,j,count,na:longint。flag:boolean。a:array1.100ofinteger。beginwriteln(inputn:。readln(n。s:=1。count:=0。fori:=1tondos:=s*2。fori:=0tos-1dobeginm:=i。forj:=1tondobeginaj:=mmod2。m:=mdiv2。end。flag:=true。forj:=1ton-1doif(aj=1and(aj+1=1thenbeginflag:=false。break。end。na:=0。forj:=1tondoifaj=0thenna:=
43、na+1。if(flag=trueand(na=8thencount:=count+1。end。writeln(count。end.16.给定自然数1到n的集合和自然数mn),求各元素之和等于m的子集。设n=20,m=48)。1)共有多少个符合上述条件的子集?2)符合上述条件且子集元素数目为5的子集有多少?)提示:集合的元素不能重复,此题可分39个元素类别集合讨论,下面给出第2问的源程序)doforb:=a+1totrunc(m-1/4doforc:=b+1totrunc(m-1-2/3doford:=c+1totrunc(m-1-2-3/2dofore:=d+1to20doif(a+b+c+
44、d+e=mtheninc(count。writeln(count5=,count。end.以下程序设计试卷来自全国青少年信息学奥林匹克联赛一一培训习题与解答中学)1、计算1X2+3X4+5X6+49X50的值。)。end。writeln(s。end.2、给定一串整数数列,求出所有的递增和递减子序列的数目。例如数列7、2、6、9、8、3、5、2、1可分为7,2)、2,6,9)、9,8,3)、3,5)、5,2,1)五个子序列,答案就是5。我们称2、9、3、5为转折元素。fori:=1to9doread(ai。n:=1。fori:=2to9-1doif(aiand(aior(aiai-1and(ai
45、ai+1thenn:=n+1。writeln(n:8。end.3、将19这9个数字分成三组每个数字只能使用一次),分别组成三个三位数,且这三个三位数的值构成1:2:3的比例,试求出所有满足条件的三个三位数。)分析:注意下面源程序所采用的算法,非常好)答案:192、384、576)、219、438、657)、273、546、819)、327、654、981)programe。vara:array0.9ofinteger。i,g,s,b,k,t:integer。beginwriteln。fori:=100to333dobeginfork:=0to9doak:=0。k:=i。g:=kmod10。s:
46、=(kdiv10mod10。b:=kdiv100。ag:=1。as:=1。ab:=1。k:=2*i。g:=kmod10。s:=(kdiv10mod10。b:=kdiv100。ag:=1。as:=1。ab:=1k:=3*i。g:=kmod10。s:=(kdiv10mod10。b:=kdiv100。ag:=1。as:=1。ab:=1。t:=0。fork:=1to9dot:=t+ak。ift=9thenwriteln(i:4,i*2:4,i*3:4。end。end.4、回文算术:任给一个三位数abc,算出abc与cba之和。若该和数不是回文数回文数的定义是从左读和从右读一样,如5、121、1221等
47、),再按上述方法求和。以此类推,直到得到回文形式的和数或者和数的位数已经超过15位时中止计算。programe。vara,b:array1.20ofinteger。x,i,m:integer。hw:boolean。beginwriteln。write(abc=。readln(x。fori:=1to15doai:=0。a1:=xmod10。a2:=(xdiv10mod10。a3:=xdiv100。m:=3。hw:=false。while(hw=falseand(mdobeginfori:=1tomdobi:=am-i+1。i:=1。while(iand(ai=bidoi:=i+1。ifimthe
48、nhw:=trueelsebeginfori:=mdownto1dowrite(ai。write(+。fori:=mdownto1dowrite(bi。write(=。fori:=1tomdobeginai:=ai+bi。ai+1:=ai+1+aidiv10。ai:=aimod10。end。ifam+10thenm:=m+1。fori:=mdownto1dowrite(ai。writeln。end。end。ifhwthenwriteln(success!elsewriteln(Fail!。end.5、求一个nXn数阵中的马鞍数,输出它的位置。所谓马鞍数,是指在行上最小而在列上最大的数。2)15
49、41425711427811923168592312522321185322211815171241261716241261310192021310192014测试数据:矩阵1)矩阵programe。constn=5。vari,j,min,x,y:integer。flag:boolean。a:array1.n,1.nofinteger。beginwriteln。writeln(input,n,*,n,integernumber:。fori:=1tondoforj:=1tondoread(ai,j。flag:=false。fori:=1tondobeginmin:=ai,1。x:=i。y:=1。
50、forj:=1tondoifai,jminthenbeginmin:=ai,j。y:=j。end。forj:=1tondoifaj,yax,ythenbreak。if(j=nand(ax,yan,ythenbeginwrite(ax,y,(,x,y,。flag:=true。end。end。ifflag=falsethenwriteln(Nofind!。end.6、数学黑洞6174。已知:一个任意的四位正整数全相同的除外,如1111)。将数字重新组合成一个最大的数和最小的数相减,重复这个过程,最多七步,必得6174。即:76411467=6174。将永远出不来。求证:所有四位数数字全相同的除外)
51、,均能得到6174。输出掉进黑洞的步数。read(d。if(dmod11110thenwhiled6174dobegina1:=ddiv1000。a2:=(dmod1000div100。a3:=(dmod100div10。a4:=dmod10。fori:=1to4doforj:=i+1to4doifai。end。end.以下程序设计试卷来自青少年信息学竞赛题库)1、输入10个正整数,计算它们的和,平方和。s:=0。p:=0。fori:=1to10dobeginread(d。s:=s+d。p:=p+d*d。end。writeln。write(s:8,p:8。end.2、统计1999中能被3整除,
52、且至少有一位数字是5的数。)and(imod10=5or(idiv10mod10=5or(idiv100=5thenbeginwrite(i:8。s:=s+1。end。end。writeln。write(s:8。end.3、从键盘输入一个2050之间的整数,统计出边长为整数,周长为输入数的不等边三角形的个数。测试数据:输入27,输出18)programI_9。varx,y,z,k,s:integer。beginwriteln。writeln(inputaintegernumber(20n:。readln(s。k:=0。forx:=1to(sdiv3dofory:=xto(s-xdiv2dobe
53、ginz:=s-x-y。if(x+yzthenbeginwriteln(x:4,y:4,z:4。k:=k+1。end。end。if(smod3=0thenk:=k-1。write(k。end.4、一个整数的立方可以表示为两个整数的平方差,如19853=19711052-19691202。编程:输入一个整数N,自动将其写成N3=X2-Y2。)提示:N3=X2-Y2=(X+Y(XY,所以必有xY)=N,Ofory:=1tomaxlongintdobeginx:=y+nOif(n*n=x+ythenbeginwriteln(n,A3=,x,A2-,y,A2oexit。end。endOend.5、任意
54、给定平面上三个点AX1,Y1),BX2,Y2),CX3,Y3),试判断这三个点能否构成三角形。能则求出它的面积。)。read(x1,y1,x2,y2,x3,y3。a:=sqrt(x1-x2*(x1-x2+(y1-y2*(y1-y2。b:=sqrt(x2-x3*(x2-x3+(y2-y3*(y2-y3。c:=sqrt(x3-x1*(x3-x1+(y3-y1*(y3-y1。ifabthenbegink:=a。a:=b。b:=k。end。ifacthenbegink:=a。a:=c。c:=k。end。ifa/2。e:=sqrt(d*(d-a*(d-b*(d-c。write(area=,e:8:3。e
55、ndelsewrite(bunenggouchengsanjiaoxing。end.6、59=32+52+52=12+32+72,即59可以分别等于两组不同的自然数每组各3个数)的二次幂之和,请找出10个最小的具有这种特性的数。)分析:注意此程序中Goto语句的用法)答案:27、1、1、5、3、3、3)33、1、4、4、2、2、5)。ifcount=10thenexit。n:=0。fora:=1totrunc(sqrt(m/3doforb:=atotrunc(sqrt(m-a*a/2doforc:=btotrunc(sqrt(m-a*a-b*bdoif(a*a+b*b+c*cmthengoto
56、1elseif(a*a+b*b+c*c=mthenbegininc(n。ifn=1thenbegina1:=a。b1:=b。c1:=c。endelseifn=2thenbegininc(count。writeln(m:4,a1:4,b1:4,c1:4,a:4,b:4,c:4。goto1。end。end。end。untilcount=10。end.7、每一个素数的倒数都可以化为一个循环小数,例如:1/7可以化为0.142857),1/13可化为0.076923)。编程把17的倒数化为循环小数。)programI_25。vara,b,c,i,j,k:integer。e:array1.200ofin
57、teger。yes:boolean。beginwriteln。a:=1。b:=17。fori:=1to200dobeginc:=a*10divb。a:=10*amodb。ei:=c。end。fori:=1to200doforj:=i+1to200doif(ei=ejthenbeginyes:=true。fork:=1toj-idoifeiejthenyes:=false。ifyes=truethenbeginfork:=itoj-1dowrite(ek。halt。end。end。end.8、求数列1、5、17、53、161、。前20项的和。提示:An=2+3XAn-l)答案:348678438
58、0)programI_29。varan,am,s:real。i:integer。beginwriteln。am:=1。s:=1。write(am:20:0。fori:=2to20dobeginan:=am*3+2。s:=s+an。am:=an。write(am:20:0。end。writeln。write(totle:,s:0:0。end.9、编一程序实现:由键盘输入年月日后,计算机能打印出该日期是星期几。)提示:首先算出这一年的元旦是星期几。算法如下:输入年份year;根据下面公式计算:d=year+vvyear-1)div4)-vvyear-1)div100)+vvyear-1)div40
59、0)d=dmod7;那么d=0则表示为Sunday、d=1则表示为Monday、依此类推。输入月份month和日期day,计算该日期是这个年份中的第几天x);计算vx+d-1)mod7,得到星期几。注意月份中的二月是28天还是29天,需看年份是否为闰年,闰年定义为:年份能被400整除的是闰年,或者年份能被4整除但不能被100整除的是闰年,其它年份均不为闰年。闰年的计算方法如下:若vyearmod4=0)andvyearmod1000)orvyearmod400=0)贝U为闰年。)programe。constyd:setof1.12=1,3,5,7,8,10,12。月大的月份yx:setof1.
60、12=4,6,9,11。月小的月份a:array1.12ofinteger=(0,31,59,90,120,151,181,212,243,273,304,334。a数组存放第i个月份的前i-1个月的天数因为这12个月的天数分别为31,28,31,30,31,30,31,31,30,31,30,31,故前i-1个月的天数为不断叠加s:array0.6ofstring=(Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday。varyear,m,day,d,x:integer。r,flag:boolean。beginwriteln(inp
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 凉山安全咨询合同范例
- 公司过户个人合同范本
- 农村置换地合同范例
- 入股买卖合同范本
- 分包合同范例电工
- 借款委托合同范例
- 公司旧厂房租赁合同范例
- 儿童家庭服务合同范例
- 专家集体跳槽合同范例
- 农场租凭合同范例
- 2024年高等教育法学类自考-00369警察伦理学考试近5年真题集锦(频考类试题)带答案
- 矿山开采居间合作协议书范文
- 社交媒体对消费者行为的影响调研报告
- 人防工程管理制度范本(三篇)
- GB/T 15822.1-2024无损检测磁粉检测第1部分:总则
- 计算机一级考试WPS试题及答案
- 快乐读书吧《孤独的小螃蟹》整本书阅读指导课教学设计-2023-2024学年语文二年级上册统编版
- 生猪屠宰兽医卫生检验人员理论考试题库及答案
- 五、完成课题的可行性分析
- 全科医生题库附有答案
- DL∕T 5765-2018 20kV及以下配电网工程工程量清单计价规范
评论
0/150
提交评论