小学复赛试题精选
更新时间:2024-06-16 01:54:01 阅读量: 综合文库 文档下载
- csp小学组复赛试题推荐度:
- 相关推荐
小学复赛模拟试题(一)及参考答案
第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 第4题 铺地砖(floor) 问题描述: 一天,晨晨的数学老师布置了一道题目,大意如下:用1×1和2×2的磁砖不重叠地铺满n×3的地板,共有多少种方案? 例如:n=1时:1×3的地板方法就一个,直接由三个1×1的磁砖铺满。 n=2时:2×3的地板可以由下面3种方案铺满: 方法一: 方法二: 方法三: 1×1 2×2 1×1 1×1 2×2 1×1 1×1 1×1 1×1 1×1 1×1 1×1 输入格式: 第一行:一个整数n(1≤n≤100)。 输出格式: 输出铺满n×3的地板的方案数。 输入样例: 3 输出样例: 5 数据范围: 对于20%的数据,1≦n≦15; 对于50%的数据,1≦n≦30; 对于100%的数据,1≦n≦100; 【问题分析】 用1×1和2×2的磁砖不重叠地铺满n×3的地板,共有多少种方案? 【算法分析】 先设一个f[i]表示i*3的地板铺的方法,f[1]=1;f[2]=3; i*3的地板数是这样得到的:(i-1)*3的地板比i*3的地板少的地方全铺上1*1的瓷砖,这有一种铺法;或者在(i-2)*3的地板比i*3的地板少的地方铺上2*2的瓷砖和2个1*1的瓷砖,这有两种铺法;所以得到递推式:f[i]=f[i-1]+2*f[i-2]; 因为数据较大,所以要用高精度。 【参考程序】 type ar=array[0..100] of longint; var 6 n,i,j,k,t,l:longint; a:array[1..100] of ar; function jia(r,w:ar):ar; //高精度加法 var i,j,k:longint; d:ar; begin if r[0]>w[0] then k:=r[0] else k:=w[0]; filldword(d,sizeof(d) div 4,0); d[0]:=k; for i:=1 to k do d[i]:=r[i]+w[i]; for i:=1 to k do if d[i]>9 then begin d[i+1]:=d[i+1]+(d[i] div 10); d[i]:=d[i] mod 10; end; while d[d[0]+1]>0 do begin inc(d[0]); d[d[0]+1]:=d[d[0]+1]+(d[d[0]] div 10); d[d[0]]:=d[d[0]] mod 10; end; jia:=d; end; begin assign(input,'floor.in'); assign(output,'floor.out'); reset(input); 7 rewrite(output); readln(n); //输入 a[1,0]:=1; a[1,1]:=1; a[2,0]:=1; a[2,1]:=3; for i:=3 to n do a[i]:=jia(a[i-1],jia(a[i-2],a[i-2]));//递推(a[i-2]*2= a[i-2]+a[i-2]) for i:=a[n,0] downto 1 do write(a[n,i]); //输出 writeln; close(input); close(output); end. 小学复赛模拟试题(二)及参考答案 5、购物优惠 问题描述: 某商场为了感谢顾客的支持,计划近期推出一项优惠政策,具体方案是这样的:在该商场购物总金额大于0小于50元的按原价收取;总金额大于等于50元小于100元的则总金额优惠10元,如购物总额为83元,则只要收73元就可以了;总金额大于等于100元小于200元的则总金额优惠20元,总金额大于等于200元的则总金额优惠40元。现在共有N个人到商场去购物,已知每个顾客购物的总金额,请你依次输出每个顾客该付的金额。 数据输入: 从文件shoping.in中读入数据,文件的第一行为N的值(1= 将结果输出到shoping.out中,共有N行,依次表示这N个顾客该付的金额(单位:元)。 输入输出样例: Shoping.in 5 12 54 110 248 200 Shoping.out 12 44 90 208 160 8 【问题分析】 这题就是给你N个顾客的购物总金额和一项优惠政策,让你求出优惠后该N个顾客所付的金额 【算法分析】 这题可以每读入一个数,就先求出该数所在的范围,然后根据相应的优惠措施得出优惠后的金额 【参考程序】 var n,i,p:longint; begin assign(input,'shoping.in'); assign(output,'shoping.out'); reset(input); rewrite(output); readln(n); for i:=1 to n do begin readln(p); case p of 1..49:writeln(p); 50..99:writeln(p-10); 100..199:writeln(p-20); 200..1000:writeln(p-40); end; end; close(input); close(output); end. 6、飞行时间 问题描述: 最近科学家又发现了一颗新的星星(称为T星),最近T星的外星人乘飞碟到过地球,外星人把一个计时器留在了地球上,科学家们发现了这个计时器,计时器记录了飞碟从T星到地球所用的时间,格式为:XXHXXMXXS等形式,表示共用了几小时几分几秒。如24H12M37S表示共用了24小时12分钟37秒。因为飞碟的速度非常的快,要精确到秒,科学家想知道共用了几秒时间(注意:也是60分钟为1小时,60秒为1分钟)。 数据输入: 数据从文件shijian.in中读入,只有一行,表示计时器的显示时间,注意计时间显示时 9 间的顺序不是固定的,有时为“XXHXXMXXS”,也有可能为“XXMXXHXXS”、也有可能为“XXSXXHXXM”等,不过有一个共同点就是:H表示小时,M表示分钟,S表示秒(三个字母均为大写)。 数据输出: 结果输出到shijian.out中,只有一个数,表示以秒为单位的数值。结果不超过1000000000. 输入输出样例1: shijian.in 02H12M25S shijian.out 7945 输入输出样例2: shijian.in 12S10H06M shijian.out 36372 【问题分析】 这题就是给你一个时间,把它的单位转化为秒 【算法分析】 这题可以根据第3、6、9位上的单位,求出飞碟从T星到地球用了多少时、多少分、多少秒,然后根据时、分、秒之间的进率求出飞碟从T星到地球用了多少秒 【参考程序】 var n:string; h,m,s:longint; begin assign(input,'shijian.in'); assign(output,'shijian.out'); reset(input); rewrite(output); readln(n); if n[3]='H' then val(n[1]+n[2],h) else if n[3]='M' then val(n[1]+n[2],m) else val(n[1]+n[2],s); if n[6]='H' then val(n[4]+n[5],h) else if n[6]='M' then val(n[4]+n[5],m) else val(n[4]+n[5],s); if n[9]='H' then val(n[7]+n[8],h) else if n[9]='M' then val(n[7]+n[8],m) else val(n[7]+n[8],s); writeln(h*3600+m*60+s); close(input); close(output); end. 10 7、排队接水 问题描述: “五一”劳动节到了,向阳小学五年级安排了一个小组的同学到文化广场搞清洁。广场边上只有一个水龙头,要求每一个同学带一个桶接水搞清洁,由于每个同学所带的桶大小不同,接满水所用的时间也不同,现在已知每一个同学的桶接满水所需要的时间,要求所有同学都要排队等候接水,注意接满水后的同学马上去搞清洁,不再等候,对于一个排好队的顺序,可以计算出所有同学等候接水的时间的总和。如有4个同学,他们接满水所需的时间分别是5、3、6、7,则第一个同学接水时,第二、三、四个同学都要等5个单位的时间,第二个同学接水时,则第三、四个同学都要等3个单位时间,第三个同学接水时,则第四个同学要等6个单位的时间,所有同学等候的时间共为:5*3+3*2+6*1=27。但如果同学们排队顺序改一下,他们接满水所需的时间分别是7、5、6、3,则所有同学等候的时间共为:7*3+5*2+6*1=37。现在给出每一个同学接满水所需的时间,请你安排一种排队顺序,使得所有同学等候的时间总和为最小,输出这个最小值。 数据输入: 从文件water.in中读入数据,第一行为一个正整数N(1 结果输出到文件water.out中,只有一个数,表示所有同学等候的时间总和的最小值。 输入输出样例: Water.in 4 5 3 6 7 Water.out 25 【问题分析】 这题就是给你N个同学接满水所需的时间,让你求出所有同学等候时间总和的最小值 【算法分析】 这题可以先对N个同学接满水所需的时间从小到大进行排序,由于N和Y都比较小,所以用什么排序都可以,然后把每个同学接水时,剩下同学等待的总时间加到计数器t中,最后输出t即可。 【参考程序】 var n,i,t:longint; a:array[1..100] of longint; procedure try(l,r:longint); var i,j,x,t:longint; begin i:=l; j:=r; x:=a[(l+r) div 2]; repeat while a[i] 11 if i<=j then begin t:=a[i]; a[i]:=a[j]; a[j]:=t; inc(i); dec(j); end; until i>j; if l assign(input,'water.in'); assign(output,'water.out'); reset(input); rewrite(output); readln(n); for i:=1 to n do readln(a[i]); try(1,n); for i:=1 to n do t:=t+a[i]*(n-i); writeln(t); close(input); close(output); end. 12 8、聪明的小李 问题描述: 小李是希望小学六年级的学生,在一次数学课上,张老师出了一道题,小李很快就答出来了。这个题目是这样的:给定一个正整数N,请求出2~N之间长度最长的、成等差数列的素数(质数)。例如:当N的值为40时,在2~40之间的全部素数有: 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37。其中公差(每两个数之间的差)为1的素数数列为2, 3,其长度(素数的个数)为2, 公差为2的素数数列为3, 5, 7,其长度为3. ?? 。 数据输入: 数据从文件sushu.in中读入,只有一个正整数N(2 数据输出到文件sushu.out中,第一行只有一个数t,表示2~N之间长度最长的、成等差数列的素数(质数)的个数,第二行有t个数,表示符合条件的素数数列,两个数之间用空格隔开(如果最长长度相同的素数列有多种方案,则输出第一个数数值最小的那个数列)。 提示 :1、所谓等差数列就是每两个数之间的差都相等的一列数。 2、本题算法可为:首先用筛选法求2-N之间的全部素数,存放在数组B中,然后 用2个变量i,j分别表示数列的第一个数和公差,将求出的每个素数尝试作为素数列的第一个数,公差逐步增大,从而求出满足条件的素数数列。 输入输出样例: Sushu.in 40 Sushu.out 5 5 11 17 23 29 【问题分析】 这题就是给你一个数N\\,让你求出2~N中所有素数所能组成的最大的等差数列 【算法分析】 这题可以先求出2~N中所有的素数,放在b数组中,并求出2~N中所有的素数的个数k,然后求出以b[i]为首项,b[j]-b[i]为公差,所组成的等差数列最多能有几项(1<=i var a:array[2..10000] of boolean; b:array[1..2000] of longint; n,i,j,k,t,s,ans,total,max,q:longint; begin assign(input,'sushu.in'); assign(output,'sushu.out'); reset(input); rewrite(output); readln(n); for i:=2 to trunc(sqrt(n)) do if not a[i] then 13 begin k:=i; while k+i<=n do begin k:=k+i; a[k]:=true; end; end; k:=0; for i:=2 to n do if not a[i] then begin inc(k); b[k]:=i; end; max:=1; ans:=1; for i:=1 to k-1 do for j:=i+1 to k do begin s:=b[j]-b[i]; total:=2; t:=b[j]; while not a[t+s] do begin t:=t+s; if t>n then break; inc(total); end; if total>max then begin max:=total; ans:=i; q:=s; end; end; writeln(max); for i:=1 to max-1 do write(b[ans]+(i-1)*q,' '); writeln(b[ans]+(max-1)*q); close(input); close(output); end. 14
正在阅读:
小学复赛试题精选06-16
《企划实战方法与策略》01-24
男生,请别低到尘埃里去11-03
新生命第四课 Microsoft Office Word 文档10-27
小升初学生如何达到高效的复习效果03-30
成立工会的请示范文02-13
- 多层物业服务方案
- (审判实务)习惯法与少数民族地区民间纠纷解决问题(孙 潋)
- 人教版新课标六年级下册语文全册教案
- 词语打卡
- photoshop实习报告
- 钢结构设计原理综合测试2
- 2014年期末练习题
- 高中数学中的逆向思维解题方法探讨
- 名师原创 全国通用2014-2015学年高二寒假作业 政治(一)Word版
- 北航《建筑结构检测鉴定与加固》在线作业三
- XX县卫生监督所工程建设项目可行性研究报告
- 小学四年级观察作文经典评语
- 浅谈110KV变电站电气一次设计-程泉焱(1)
- 安全员考试题库
- 国家电网公司变电运维管理规定(试行)
- 义务教育课程标准稿征求意见提纲
- 教学秘书面试技巧
- 钢结构工程施工组织设计
- 水利工程概论论文
- 09届九年级数学第四次模拟试卷
- 试题精选
- 复赛
- 小学