小学复赛试题精选

更新时间:2023-11-12 11:39:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

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

第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;

1

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

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

writeln(k); //输出 writeln(l); close(input); close(output); end.

第2题 阅读训练(read)

问题描述:

一天晨晨在做阅读训练。她拿了一本包括n篇文章的小说集,第i篇文章包括bi (1≤bi≤100)页,已知晨晨每读一页都要花一分钟。假设晨晨开始阅读小说第一页的时间起点为0,她读第一篇文章从时间点0到时间点b1-1,第二篇文章从时间点b1到时间点b1+b2-1,依此类推?,阅读第n篇文章的时间点b1+b2+?+bn-1到时间点b1+b2+?+bn-1+bn-1。那么,当在时间点t时(0≤t<阅读总时间),你知道晨晨在阅读第几篇文章吗?

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

严重偏文科的晨晨,感觉这个问题很棘手,就想请你这个电脑高手帮忙。 例如:如果一本书包括三篇文章:第一篇文章2页,第二篇文章1页,第三篇文章3页,那么时间点与所读文章(序号)的关系如下图所示:

时间点 所读文章序号 输入格式: 第一行:包括空格分开的两个整数N和Q (其中1≤n≤100,1≤Q≤1000) 。

2

0 1 1 1 2 2 3 3 4 3 5 3 接下来的N行,每行一个整数代表每篇文章的页数。 再接下来是Q行,每行一个整数代表一个时间点。 输出格式:

总共Q行,每行一个数,代表按输入顺序的每个时间点正在阅读的文章序号。 输入样例: 3 5 2 1 3 2 3 4 0 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

3

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

4

输出样例: 3

数据范围:

对于60%的数据,2≦R,C≦5; 对于80%的数据,2≦R,C≦18; 对于100%的数据,2≦R,C≦25;

【问题分析】

给出R串字符串,其中用“#”给出一些十进制数,输出其中最小的数。 【算法分析】

简单模拟题,要用字符串操作,逐一提取字符串中的数,然后进行比较。【参考程序】 var

n,m,i,j,k,t,l:longint; a:array[1..25] of string; s,s1:string; begin

assign(input,'game.in'); assign(output,'game.out'); reset(input); rewrite(output);

readln(n,m); //输入

s:='99999999999999999999999999999999999999999999999'; for i:=1 to n do begin

readln(a[i]); while a[i]<>'' do begin

k:=pos('#',a[i]); //查找“#” if k=0 then break; s1:=copy(a[i],1,k-1);

if s1<>'' then //进行比较

if (length(s1)

if a[i]<>'' then //进行比较

if (length(a[i])

writeln(s); //输出 close(input);close(output); end.

5

本文来源:https://www.bwwdw.com/article/19lv.html

Top