程序设计答题分析12.doc

上传人:b****1 文档编号:203676 上传时间:2022-10-06 格式:DOC 页数:6 大小:86.50KB
下载 相关 举报
程序设计答题分析12.doc_第1页
第1页 / 共6页
程序设计答题分析12.doc_第2页
第2页 / 共6页
程序设计答题分析12.doc_第3页
第3页 / 共6页
程序设计答题分析12.doc_第4页
第4页 / 共6页
程序设计答题分析12.doc_第5页
第5页 / 共6页
点击查看更多>>
下载资源
资源描述

程序设计答题分析12.doc

《程序设计答题分析12.doc》由会员分享,可在线阅读,更多相关《程序设计答题分析12.doc(6页珍藏版)》请在冰豆网上搜索。

程序设计答题分析12.doc

2015程序设计答题分析(小学)

1.超市为了促销,规定:

购物不足60元的按原价付款,超过60不足200的按九折付款,超过200元的,超过部分按八折付款。

编程完成超市的自动计费的工作,输入购物金额原价,输出打折后的金额。

分析:

这个题是一个分支结构的多层嵌套。

阅读题目要求时,对200元以上的,超过200的部分是8折,剩下的200元按9折算。

打折后可能会是小数点,要考虑数据类型。

Varn:

real;

Begin

Read(n);

Ifn>60then

Ifn<=200then

N:

=n*0.9

Elsen:

=(n-200)*0.8+180;

Write(n)

End.

2.输入一个奇数n,请编程计算并输出1+(1+3)+(1+3+5)+……(1+3+5+……+n)的结果。

分析:

此题是简单的双层循环。

Vari,j,s,n:

integer;

Begin

Read(n);

Fori:

=1tondo

Forj:

=1toido

S:

=s+(2*j-1);

Weite(s);

End.

3.李先生和他的孙子同出生于20世纪,他的孙子与他的年龄之差为60岁,李先生和他的孙子出生年份被3,4,5,6除,余数分别为1,2,3,4,编程求出李先生和他的孙子各出生在哪一年。

分析:

这个题用穷举法就太累了。

分析一下,一个数字被5除余3的话,这个数的个位数只能是3和8,被6除余4的话,个位数是4、8、2、6、0,这两者同时满足,这个年份的个位数只能是8。

只要从1908、1918、1928、1938,这四个数中找一个满足条件同时加60后也满足条件的就行了。

4.狼追兔子,兔子躲进了10个环形分布的洞的某一个中。

狼在第1个洞中没有找到兔子,就间隔1个洞,到第3个洞中去找,也没找到兔子,就间隔2个洞,到第6个洞中去找。

以后狼每次多隔1个洞去找兔子,……。

这样狼找了1000次也找不到兔子。

请问兔子可能躲在哪个洞中?

分析:

该题看似简单,只要每次把狼找过的洞删除就行了,但是,这种删除操作的结束状态(条件)是什么呢?

而且,狼的搜索过程中,如果要间隔11个洞时,我们是否可以认为就是间隔1个洞?

实际上,第一个问题应该是当狼回到第1个洞,并且又上间隔1个洞去找兔子时,就应该结束删除操作,因为此后的搜索是重复以前的搜索了,此时,那些没有被删除过的洞就是答案。

这里,大家一定不能想当然地认为:

结束条件就是只剩下一个洞的时候!

题目中并没有说明只有一个答案,事实上是有四个洞的!

第二个问题也是可行的。

因为只有10个洞,间隔11个洞和间隔1个洞的作用是相同的。

vard:

array[1..10]ofinteger;

i,j,k,l:

integer;

begin

fori:

=1to10dod[i]:

=1;

i:

=1;

j:

=1;

repeat

d[i]:

=0;

j:

=j+1;

ifj>10thenj:

=j-10;

i:

=i+j;

ifi>10theni:

=i-10;

until(i=1)and(j=1);

fori:

=1to10doifd[i]>0thenwrite(i);

end.

初中

1.从键盘输入一个小于1000的正整数,若此数的各位数字之和能被7整除,则输出这个数。

分析:

此题简单,但重点在“被”字上,对输入的数分解出个、十、百位上的数字,相加后得出的和被7整除。

参考程序

programp1;

varn,m,k:

integer;

begin

readln(k);

m:

=0;

whilen<>0do

begin

m:

=m+nmod10;

n:

=ndiv10;

end;

ifmmod7=0thenwriteln(k);

end.

2.键盘输入N,求N!

末尾有多少个连续的零。

其中N!

=1×2×3×……N(1<=N<=1000)。

算法一:

从1乘到n,每乘一个数判断一次,若后面有0则去掉后面的0,并记下0的个数。

为了不超出数的表示范围,去掉与生成0无关的数,只保留有效位数,当乘完n次后就得到0的个数。

(pascal程序如下)

vari,t,n,sum:

longint;

begin

t:

=0;sum:

=1;

readln(n);

fori:

=1tondo

begin

sum:

=sum*i;

whilesummod10=0do

begin

sum:

=sumdiv10;

inc(t);{计数器增加1}

end;

sum:

=summod1000;{舍去与生成0无关的数}

end;

writeln(t:

6);

end.

算法二:

此题中生成O的个数只与含5的个数有关,n!

的分解数中含5的个数就等于末尾O的个数,因此问题转化为直接求n!

的分解数中含5的个数。

vart,n:

integer;

begin

readln(n);

t:

=0;

repeat

n:

=ndiv5;

inc(t,n);{计数器增加n}

untiln<5;

writeln(t:

6);

end.

分析对比两种算法就不难看出,它们的时间复杂度分别为O(N)、O(logN),算法二的执行时间远远小于算法一的执行时间。

在信息学奥赛中,其主要任务就是设计一个有效的算法,去求解所给出的问题。

如果仅仅学会一种程序设计语言,而没学过算法的选手在比赛中是不会取得好的成绩的,选手水平的高低在于能否设计出好的算法。

3.有1至8号共8个球,其中某一个为次品,仅重量不同(可轻可重)。

编程,在以天平为工具,通过测重量用最少的次数挑出次品,并确定它是轻是重。

提示:

可以用下面表示的比较方法来设计程序:

b1+b2+b3?

b4+b5+b6

>=<

b1+b4?

b2+b5b7?

b8bl+b4?

b2+b5

>=<><>=<

b1?

b2b3?

b1b2?

b1b7?

b1b8?

blbl?

b2b1?

b3b2?

b1

>==>>=>==>>=>=>=

是是是是是是是是是是是是是是是是

b1b5b6b3b2b4b7b8b7b8b2b4b3b6blb5

重轻轻重重轻重轻轻重轻重轻重轻重

参考考生程序

programp3;

varcpcode:

-8..8;

cpweight,zpweight,i:

integer;

wt:

array[1..8]ofinteger;

functionfinddiff(a,b,c:

integer):

integer;

begin

ifa=bthen

ifa=cthenfinddiff:

=0

elseifa>cthenfinddiff:

=-3elsefinddiff:

=3

else

ifa>bthen

ifb=cthenfinddiff:

=1elsefinddiff:

=-2

else

ifb=cthenfinddiff:

=-1elsefinddiff:

=2;

end;

begin

write('cipinhao:

');

readln(cpcode);

write('cipinzhong:

');

readln(cpweight);

write('zhengpinzhong:

');

readln(zpweight);

write('cipinhao:

');

fori:

=1to8do

ifi=cpcodethenwt[i]:

=cpweightelsewt[i]:

=zpweight;

ifwt[1]+wt[2]+wt[3]<>wt[4]+wt[5]+wt[6]then

begin

iffinddiff(wt[1],wt[2],wt[3])=0then

iffinddiff(wt[4],wt[5],wt[6])>0thencpcode:

=3+finddiff(wt[4],wt[5],wt[6])

elsecpcode:

=-3-finddiff(wt[4],wt[5],wt[6])

elsecpcode:

=finddiff(wt[1],wt[2],wt[3]);

end

else

begin

ifwt[7]>wt[8]thenifwt[7]>wt[1]thencpcode:

=7elsecpcode:

=-8

elseifwt[7]=wt[1]thencpcode:

=8elsecpcode:

=-7;

end;

writeln(abs(cpcode));

write('Cipin:

');

ifcpcode<0thenwriteln('QING')elsewriteln('ZHONG');

end.

4.任意一个自然数,我们可以将其平均截取成三个自然数。

例如135768,可以截取成13,57,68。

如果某自然数不能平均截取(位数不能被3整除),可将该自然数高位补零后截取。

如4128,可在高位补零后成为004128,平均截取成00,41,28三个数。

编程从键盘上输入一个自然数N(N的位数<12),计算截取后第一个数加第三个数减第二个数的结果。

分析:

此题难点数据类型上,限定小于12位的自然数已超出长整数的范围,可以转成字符串来运行。

参考程序

programp4;

Varn:

sting[12];

I,m,code,a:

integer;

Begin

Readln(n);

Caselength(n)mod3of

2:

n:

’0’+0;

1:

n:

=’00’+n;

End;

Val(copy(n,length(n)div3),m,code);

A:

=m;

Val(copy(nl

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

当前位置:首页 > 工作范文 > 制度规范

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

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