小学复赛试题精选

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

小学复赛模拟试题(一)及参考答案

第1题摘李子(plums)

问题描述:

六一儿童节就要到了,晨晨学校组织n位学生去农场摘李子。为了体现同学友好,大家把摘到的李子集中起来,然后平均分配给学生,剩余的李子就送给老师;另外,为了让老师也更多地分享同学们的快乐,同学们还约定:如果按前面办法分配后老师得到的李子数比每个同学的少,则每位同学再拿一个出来送给老师。

现在晨晨想知道每位同学最后能收获多少个李子?送给了老师多少个李子?

输入格式:

第一行:一个整数n(1≤n≤200)。

第二行:n个200以内的正整数,它们之间用一个空格隔开,代表每人摘到的李子数。

输出格式:

第一行:一个整数,代表每位学生最后能收获的李子数。

第二行:一个整数,代表老师最后能收到的李子数。

输入样例1:

4

3 5 2 1

输出样例1:

2

3

输入样例2:

10

95 90 88 92 94 98 96 93 92 94

输出样例2:

84

92

【问题分析】

给出n个数,求出平均数(去尾),若这次除法的余数小于商,就把商减一,余数加n。然后直接输出。

【算法分析】

只要求和,求余数操作。Integer能过70%的数据,longint能过全部数据。属于送分题。【参考程序】

var

n,i,j,k,t,l:longint;

begin

assign(input,'plums.in');

assign(output,'plums.out');

reset(input);

rewrite(output);

readln(n);

for i:=1 to n do

begin

read(k); t:=t+k; //输入并求和

end;

k:=t div n; //进行除法操作

l:=t mod n;

if l

begin

k:=k-1; l:=l+n;

end;

writeln(k); //输出

writeln(l);

close(input);

close(output);

end.

第2题阅读训练(read)

问题描述:

一天晨晨在做阅读训练。她拿了一本包括n篇文章的小说集,第i篇文章包

括b

i (1≤b

i

≤100)页,已知晨晨每读一页都要花一分钟。假设晨晨开始阅读小

说第一页的时间起点为0,她读第一篇文章从时间点0到时间点b

1

-1,第二篇文

章从时间点b

1到时间点b

1

+b

2

-1,依此类推…,阅读第n篇文章的时间点b

1

+b

2

+…

+b

n-1到时间点b

1

+b

2

+…+b

n-1

+b

n

-1。那么,当在时间点t时(0≤t<阅读总时间),你

知道晨晨在阅读第几篇文章吗?

其实晨晨的好奇心比你还强,虽然阅读还未正式开始,但她很想知道在未来Q 个时间点时,自己分别会在阅读哪一篇文章?

严重偏文科的晨晨,感觉这个问题很棘手,就想请你这个电脑高手帮忙。

例如:如果一本书包括三篇文章:第一篇文章2页,第二篇文章1页,第三篇文章3页,那么时间点与所读文章(序号)的关系如下图所示:

第一行:包括空格分开的两个整数N和Q (其中1≤n≤100,1≤Q≤1000) 。

接下来的N行,每行一个整数代表每篇文章的页数。

再接下来是Q行,每行一个整数代表一个时间点。

输出格式:

总共Q行,每行一个数,代表按输入顺序的每个时间点正在阅读的文章序号。输入样例:

3 5

2

1

3

2

3

4

1

输出样例:

2

3

3

1

1

【问题分析】

给出N个数,每个数占这个数大小的时间(时间第一个单位是0),然后给出Q个时间点,输出这些时间点对应的数。

【算法分析】

把N个数在一个数组中表示出来,然后对每个时间点进行查找再输出即可。

【参考程序】

var

n,m,i,j,k,t,l:longint;

a:array[0..10000] of longint;

begin

assign(input,'read.in');

assign(output,'read.out');

reset(input);

rewrite(output);

readln(n,m);

t:=0;

for i:=1 to n do

begin

readln(k); //输入

for j:=t to t+k-1 do a[j]:=i; //在数组中表示数

t:=t+k;

end;

for i:=1 to m do

begin

readln(k);

writeln(a[k]); //输出

end;

close(input);

close(output);

end.

第3题填字游戏(game)

问题描述:

六一儿童节就要到了,晨晨的学校进行游园活动,其中一个游戏为填字游戏,规则为:有一个R行C列的棋盘(2≤R,C≤25),棋盘上的每一个格子要么是空的,可以填一个十进制数字;要么是堵上的,以字符“#”表示(即不能填东西)。棋盘中从左往右连续的数字排列可视为一个十进制整数。

现在给你一个已填好的棋盘,请你帮忙找出棋盘里面最小的整数。

输入格式:

第一行:包括两个数,R和C(2≤R,C≤25),表示R行C列。

接着R行中每行包括C个字符,这些字符要么是数字,要么是“#”。输入数据保证存在解,不存在前导0的情况(例如:01,002)。

输出格式:

棋盘中最小的整数。

输入样例:

3 6

3#5789

897#51

163#31

相关文档
最新文档