小学复赛模拟试题(一)及参考答案第1题摘李子(plums)问题描述:六一儿童节就要到了,晨晨学校组织n位学生去农场摘李子。
为了体现同学友好,大家把摘到的李子集中起来,然后平均分配给学生,剩余的李子就送给老师;另外,为了让老师也更多地分享同学们的快乐,同学们还约定:如果按前面办法分配后老师得到的李子数比每个同学的少,则每位同学再拿一个出来送给老师。
现在晨晨想知道每位同学最后能收获多少个李子?送给了老师多少个李子?输入格式:第一行:一个整数n(1≤n≤200)。
第二行:n个200以内的正整数,它们之间用一个空格隔开,代表每人摘到的李子数。
输出格式:第一行:一个整数,代表每位学生最后能收获的李子数。
第二行:一个整数,代表老师最后能收到的李子数。
输入样例1:43 5 2 1输出样例1:23输入样例2:1095 90 88 92 94 98 96 93 92 94输出样例2:8492【问题分析】给出n个数,求出平均数(去尾),若这次除法的余数小于商,就把商减一,余数加n。
然后直接输出。
【算法分析】只要求和,求余数操作。
Integer能过70%的数据,longint能过全部数据。
属于送分题。
【参考程序】varn,i,j,k,t,l:longint;beginassign(input,'plums.in');assign(output,'plums.out');reset(input);rewrite(output);readln(n);for i:=1 to n dobeginread(k); t:=t+k; //输入并求和end;k:=t div n; //进行除法操作l:=t mod n;if l<k thenbegink:=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) 。
接下来的N行,每行一个整数代表每篇文章的页数。
再接下来是Q行,每行一个整数代表一个时间点。
输出格式:总共Q行,每行一个数,代表按输入顺序的每个时间点正在阅读的文章序号。
输入样例:3 52132341输出样例:23311【问题分析】给出N个数,每个数占这个数大小的时间(时间第一个单位是0),然后给出Q个时间点,输出这些时间点对应的数。
【算法分析】把N个数在一个数组中表示出来,然后对每个时间点进行查找再输出即可。
【参考程序】varn,m,i,j,k,t,l:longint;a:array[0..10000] of longint;beginassign(input,'read.in');assign(output,'read.out');reset(input);rewrite(output);readln(n,m);t:=0;for i:=1 to n dobeginreadln(k); //输入for j:=t to t+k-1 do a[j]:=i; //在数组中表示数t:=t+k;end;for i:=1 to m dobeginreadln(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 63#5789897#51163#31输出样例:3数据范围:对于60%的数据,2≦R,C≦5;对于80%的数据,2≦R,C≦18;对于100%的数据,2≦R,C≦25;【问题分析】给出R串字符串,其中用“#”给出一些十进制数,输出其中最小的数。
【算法分析】简单模拟题,要用字符串操作,逐一提取字符串中的数,然后进行比较。
【参考程序】varn,m,i,j,k,t,l:longint;a:array[1..25] of string;s,s1:string;beginassign(input,'game.in');assign(output,'game.out');reset(input);rewrite(output);readln(n,m); //输入s:='99999999999999999999999999999999999999999999999';for i:=1 to n dobeginreadln(a[i]);while a[i]<>'' dobegink:=pos('#',a[i]); //查找“#”if k=0 then break;s1:=copy(a[i],1,k-1);if s1<>'' then //进行比较if (length(s1)<length(s)) or ((length(s1)=length(s)) and (s1<s)) thens:=s1;delete(a[i],1,k);end;if a[i]<>'' then //进行比较if (length(a[i])<length(s)) or ((length(a[i])=length(s)) and (a[i]<s)) thens:=a[i];end;writeln(s); //输出close(input);close(output);end.第4题 铺地砖(floor )问题描述:一天,晨晨的数学老师布置了一道题目,大意如下:用1×1和2×2的磁砖不重叠地铺满n ×3的地板,共有多少种方案?例如:n=1时:1×3的地板方法就一个,直接由三个1×1的磁砖铺满。
n=2时:2×3的地板可以由下面3种方案铺满:方法二: 方法三:输入格式:第一行:一个整数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];因为数据较大,所以要用高精度。
【参考程序】 typear=array[0..100] of longint; varn,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;beginif r[0]>w[0] then k:=r[0]elsek:=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 doif d[i]>9 thenbegind[i+1]:=d[i+1]+(d[i] div 10);d[i]:=d[i] mod 10;end;while d[d[0]+1]>0 dobegininc(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;beginassign(input,'floor.in');assign(output,'floor.out');reset(input);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元。