复赛练习卷习题集Word格式文档下载.docx

上传人:b****5 文档编号:21333752 上传时间:2023-01-29 格式:DOCX 页数:31 大小:30.01KB
下载 相关 举报
复赛练习卷习题集Word格式文档下载.docx_第1页
第1页 / 共31页
复赛练习卷习题集Word格式文档下载.docx_第2页
第2页 / 共31页
复赛练习卷习题集Word格式文档下载.docx_第3页
第3页 / 共31页
复赛练习卷习题集Word格式文档下载.docx_第4页
第4页 / 共31页
复赛练习卷习题集Word格式文档下载.docx_第5页
第5页 / 共31页
点击查看更多>>
下载资源
资源描述

复赛练习卷习题集Word格式文档下载.docx

《复赛练习卷习题集Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《复赛练习卷习题集Word格式文档下载.docx(31页珍藏版)》请在冰豆网上搜索。

复赛练习卷习题集Word格式文档下载.docx

一行,一个整数n(1≤n≤400)

输出文件2.out:

一行7个整数,以空格相隔,(依次是星期一、星期二、星期三、……、星期日的次数)

样例

1

1312221

n,y,r,t,xq,i,j:

{n:

年,y:

月,r:

日期,t:

天数,xq:

星期几,i:

年数}

array[1..7]ofinteger;

assign(input,'

1.in'

);

reset(input);

assign(output,'

1.out'

rewrite(output);

readln(i);

i:

=1900+i;

{得到结束年份}

n:

=1900;

{开始于1900年}

xq:

repeat

fory:

=1to12do

begin

caseyof

1,3,5,7,8,10,12:

t:

=31;

4,6,9,11:

=30;

2:

if(nmod400=0)or(nmod100<

>

0)and(nmod4=0)

thent:

=29

elset:

=28

{判断每个月的天数}

forr:

=1totdo

=xq+1;

ifxq=8thenxq:

=1;

{星期从1到7变化,到8则令其为1}

ifr=13thens[xq]:

=s[xq]+1;

{日期为13时,对应的星期几次数增加1}

{每次循环时间过去一天}

{每次循环时间过去一个月}

=n+1;

{年份增加1}

untili=n;

forj:

=1to6dowrite(s[j],'

'

write(s[7];

close(input);

close(output);

第三题求位数及"

0"

的个数(3.pas)

输入一个正整数N(N≤50),已知数列A1,A2,A3,……,An分别为2008,20082008,200820082008,……,20082008……2008。

问:

A1+A2+A3+……+An的和S中共有多少位数?

S当中有多少个"

输入文件3.in:

只有一行,一个正整数N。

输出文件3.out:

只有一行,二个正整数,中间用空格隔开,表示和s的位数、s中0的个数。

样例:

2          

83

var

a,s:

array[1..200]ofinteger;

n,k,z,i,j,m,l:

sx0803.in'

sx0803.out'

k:

=n*4;

{得到S的位数}

=1tondo{n个数}

=1to4*ido

L:

=jmod4;

caseLof

0:

a[j]:

=2;

1:

=8;

2,3:

{将第i个数按8002……80028002的形式存储,a[1]存放个位}

form:

=1tokdo{累加第i个数,按从低位到高位逐位相加}

s[m]:

=s[m]+a[m];

ifs[m]>

=10thenbegin

=s[m]mod10;

a[m+1]:

=a[m+1]+1;

z:

=1to4*ndo

ifs[i]=0thenz:

=z+1;

{统计0的个数}

writeln(k,'

z);

close(input);

第四题扫雷(4.pas)

有一种简单的扫雷游戏:

在n行2列的方格棋盘上,左列某些方格内埋有地雷,而右列每个方格中都有一个数字(0~3),第I格的数字表示:

左列第I-1、I、I+1格(即:

上、中、下三格)中埋雷的总数。

如下所示:

左图是初始状态,右图是扫雷完成状态(插小旗的方格内有雷)。

你的任务是:

根据右列的数字分析出左列格子中的地雷(0表示无雷,1表示有雷),并且统计出左列格子中地雷的总数。

输入文件

输入文件4.in:

第一行,一个整数N(3≤N≤40),第二行有N个数字(以空格相隔),表示右列格子中的数字。

输出文件

输出文件4.out:

第一行是N个0、1数字(没有空格相隔),表示左列每格中有无地雷。

第二行一个整数,表示地雷总数。

7          

1232222       

0111011

5

n,l,i:

a,b:

array[1..40]ofinteger;

flag1:

boolean;

sx0804.in'

);

sx0804.out'

=false;

=1tondoread(b[i]);

a[1]:

{初值}

a[2]:

=b[1]-a[1];

=3tondo

a[i]:

=b[i-1]-a[i-1]-a[i-2];

if(a[i]<

0)and(a[i]<

1)then

=true;

break;

ifa[n]<

b[n]-a[n-1]thenflag1:

ifflag1thenbegin

a[1]:

{初值}

a[2]:

fori:

=1tondo

write(a[i]);

ifa[i]=1thenL:

=L+1;

writeln;

writeln(L);

 

复赛练习二

第一题明明的随机数(1.pas)

明明想在学校中请一些同学一起做一项问卷调查,为了实验的客观性,他先用计算机生成了N个1到1000之间的随机整数(N≤100),对于其中重复的数字,只保留一个,把其余相同的数去掉,不同的数对应着不同的学生的学号。

然后再把这些数从小到大排序,按照排好的顺序去找同学做调查。

请你协助明明完成“去重”与“排序”的工作。

输入文件1.in有2行,第1行为1个正整数,表示所生成的随机数的个数N;

第2行有N个用空格隔开的正整数,为所产生的随机数。

输出文件1.out也是2行,第1行为1个正整数M,表示不相同的随机数的个数。

第2行为M个用空格隔开的正整数,为从小到大排好序的不相同的随机数。

输入:

10

2040326740208930040015

输出:

8

152032406789300400

a:

array[1..1000]ofboolean;

i,n,x,max:

longint;

sx0802.in'

sx0802.out'

fillchar(a,sizeof(a),false);

read(x);

a[x]:

=true;

=1to1000do

ifa[i]thenn:

writeln(n);

ifa[i]thenwrite(i,'

第二题喝醉的狱卒(2.pas)

在一所监狱里有一条长长的走廊,沿着走廊排列着n个牢房。

每个牢房有一个囚犯,而且房门都是锁着的。

一天晚上,狱卒觉得很无聊,于是他决定玩一个游戏。

第一轮,他喝了一口威士忌,然后沿着走廊,将所有牢房的门打开。

第二轮,他又喝了一口威士忌,然后又沿着走廊,将所有编号为2的倍数的牢房锁上。

第三轮,他再喝一口威士忌,再沿着走廊,视察所有编号为3的倍数的牢房。

如果牢房是锁着的,他就把它打开;

如果牢房是开着的,他就把他锁上。

他如此玩了n轮后,喝下最后一口威士忌,醉倒了。

当他醉倒后,一些犯人发现他们的牢房开着而且狱卒已经无能为力。

他们立刻逃跑了。

现给出走廊上牢房的数目,请你确认有多少犯人逃出了监狱。

输入文件2.in只有一行,为一个不大于10000的整数,表示牢房的数目n。

输出文件2.out只有一行,一个整数,表示逃跑的犯人的数目。

5

2

array[0..10001]ofboolean;

n,i,j,number:

sqrt.in'

sqrt.out'

read(n);

fillchar(a,sizeof(a),true);

=1tondivido

a[j*i]:

=not(a[j*i]);

number:

ifa[i]theninc(number);

writeln(number);

end.

第三题3n+1数链问题(文件名:

3.pas)

问题描述:

在计算机科学上,有很多类问题是无法解决的,我们称之为不可解决问题。

然而,在很多情况下我们并不知道哪一类问题可以解决,哪一类问题不可解决。

现在我们就有这样一个问题,问题如下:

(1)输入一个正整数n;

(2)把n显示出来;

(3)如果n=1则结束;

(4)如果n是奇数则n变为3×

n+1,否则n变为n/2;

(5)转入第

(2)步。

例如对于输入的正整数22,应该有如下数列被显示出来:

221134175226134020105168421

我们推测:

对于任意一个正整数,经过以上算法最终会推到1。

尽管这个算法很简单,但我们仍然无法确定我们的推断是否正确。

不过好在我们有计算机,我们验证了对于小于1000000的正整数都满足以上推断。

对于给定的正整数n,我们把显示出来的数的个数定义为n的链长,例如22的链长为16。

你的任务是编写一个程序,对于任意一对正整数i和j,给出i与j之间的最长链长,当然这个最长链长是由i与j之间的其中一个正整数产生的。

我们这里的i和j既包括i也包括j。

输入文件3.in只有一行,二个正整数i和j,i和j之间以一个空格隔开。

0<i≤j<1000。

输出文件3.out只有一行,一个正整数,即为i与j之间的最长链长。

(最长链长保证在150以内)

110

20

a,b,maxlen:

functionlinklen(x:

integer):

whilex<

1do

inc(L);

ifodd(x)thenx:

=x*3+1

elsex:

=xdiv2;

linklen:

=L;

end;

procedurerun;

i,L:

=atobdo

=linklen(i);

ifL>

maxlenthenmaxlen:

link.in'

link.out'

readln(a,b);

maxlen:

run;

writeln(maxlen);

第四题尼科梅彻斯定理(文件名:

4.pas)

任何一个正整数n的立方都可以写成一串连续的奇数之和,这就是著名的尼科梅彻斯定理。

例如:

13=1

23=3+5

33=7+9+11

43=13+15+17+19

现在当n给出之后,请你按从小到大的顺序输出这一串连续的奇数。

输入文件4.in只有一行,一个正整数n。

(n<

1000)

输出文件4.out只有一行,符合要求的一串连续的奇数,各数间只能用一空格隔开,行尾不能有多余的空格和回车。

4

13151719

n,i,k:

nico.in'

nico.out'

=n*(n-1)+1;

=1ton-1do

write(k,'

=k+2;

write(k);

复赛练习三

第一题除法(1.pas)

输入正整数N、M,求N÷

M的值。

如果商的小数部分出现循环节,则输出时要求用圆括号将循环节括起来,如果商为整数,则输出为整数。

例如:

2=0.5  1÷

3=0.(3)22÷

5=4.433÷

3=11

输入文件1.in:

一行,二个整数N,M,中间用空格间隔。

输出文件1.out:

一行,是N÷

M的值(保证小数点后不超过50位,而且未尾不能有多余的0)

4556          

0.803(571428)

n,m:

real;

r,c:

array[0..50]ofreal;

i,j,k,flag:

integer;

readln(n,m);

flag:

ifn<

0thenbegin

c[0]:

=int(n/m);

r[0]:

=n-m*c[0];

while(r[k]<

0)and(flag=1)do

c[k+1]:

=int((r[k]*10)/m);

r[k+1]:

=r[k]*10-m*c[k+1];

=k+1;

ifk=50thenflag:

while(i<

k)and(flag=1)do

if(r[i]=r[k])thenflag:

=i+1;

ifr[0]<

0thenwrite(c[0]:

0:

0,'

.'

elsewrite(c[0]:

0);

=1toi-1dowrite(c[j]:

ifr[k]<

0thenwrite('

('

0then

=itokdowrite(c[j]:

0thenwriteln('

)'

elsewriteln;

elsewriteln('

b=0'

第二题找数(2.pas)

问题描述

输入正整数N(N≤500)和K(K≤9),请找一个正整数M,使N×

M的值仅由0~K组成,而且0~K的每个数字至少出现一次。

编程序在1~30000范围内找出符合条件的最小的M值,如果找不到,则输出“Nofind!

”。

输入文件2.in:

只有一行,2个整数N,K。

输出文件2.out,只有一行,输出M或Nofind!

653

48

n,k,m,i,j,s:

t:

string;

2.in'

reset(input);

2.out'

rewrite(output);

readln(n,k);

=1to30000do{枚举}

=n*m;

str(s,a);

{将s转换为字符串a}

=0tokdo

str(i,b);

ifpos(b,a)=0thent:

=false;

{如果0~k之间有一个数不包含在a当中,则令逻辑指针为假}

iftthen

=k+1to9do

str(j,b);

ifpos(b,a)<

0thent:

{如果k~9之间有一个数包含在a当中,则令逻辑指针为假}

iftthenbegin

writeln(m);

halt

writeln('

Nofind!

'

第三题文档编辑(3.pas)

暑假当中,妈妈让小慧帮忙修改英文资料,英文中还有一些统计数据(统计数据都是正整数,而且其前、后都有空格)。

妈妈说:

如果文档结尾处有“end”,则应当删除,文中所有的统计数据都要加上一个正整数m。

你能编程序完成小慧的任务吗?

二行,第一行是一个正整数m;

第二行是待修改的文档(字符串)。

一行,修改后的文档(字符串)

13

Thereare45studentsin32class.end

Thereare58studentsin32class.

st,st1:

i,k,m,sum:

ff:

readln(m);

readln(st);

st1:

=copy(st,length(st)-2,3);

ifst1='

end'

thendelete(st,length(st)-2,3)

elseff:

untilff;

whilei<

=length(st)do

if(st[i]<

='

9'

)and(st[i]>

0'

)and(st[i-1]='

thenbegin

=i;

sum:

while(st[k]>

)and(st[k]<

)and(k<

=length(st))do

begin

sum:

=sum*10+ord(st[k])-48;

k:

end;

ifst[k]='

write(m+sum);

=k-1;

end

elsewrite(st[i]);

end

end.

第四题取数游戏(4.pas)

给出2n(n<

=100)个自然数(数小于等于30000)。

游戏双方分别为A方(计算机方)和B方(对弈的人)。

只允许从数列两头取数。

A先取,然后双方依次轮流取数。

取完时,谁取得的数字总

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

当前位置:首页 > 幼儿教育 > 育儿理论经验

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

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