第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 百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库小学复赛试题精选(2)在线全文阅读。
相关推荐: