noip2008普及组复赛试题(附题解)
2008noip普及组复赛--排座位--代码C++
2.排座椅(seat.pas/c/cpp)【问题描述】上课的时候总有一些同学和前后左右的人交头接耳,这是令小学班主任十分头疼的一件事情。
不过,班主任小雪发现了一些有趣的现象,当同学们的座次确定下来之后,只有有限的D对同学上课时会交头接耳。
同学们在教室中坐成了M行N列,坐在第i行第j列的同学的位置是(i,j),为了方便同学们进出,在教室中设置了K条横向的通道,L条纵向的通道。
于是,聪明的小雪想到了一个办法,或许可以减少上课时学生交头接耳的问题:她打算重新摆放桌椅,改变同学们桌椅间通道的位置,因为如果一条通道隔开了两个会交头接耳的同学,那么他们就不会交头接耳了。
请你帮忙给小雪编写一个程序,给出最好的通道划分方案。
在该方案下,上课时交头接耳的学生对数最少。
【输入】输入文件seat.in的第一行,有5各用空格隔开的整数,分别是M,N,K,L,D(2<=N,M<=1000,0<=K<M,0<=L<N,D<=2000)。
接下来D行,每行有4个用空格隔开的整数,第i行的4个整数X i,Y i,P i,Q i,表示坐在位置(X i,Y i)与(P i,Q i)的两个同学会交头接耳(输入保证他们前后相邻或者左右相邻)。
输入数据保证最优方案的唯一性。
【输出】输出文件seat.out共两行。
第一行包含K个整数,a1a2……a K,表示第a1行和a1+1行之间、第a2行和第a2+1行之间、…、第a K行和第a K+1行之间要开辟通道,其中a i< a i+1,每两个整数之间用空格隔开(行尾没有空格)。
第二行包含L个整数,b1b2……b k,表示第b1列和b1+1列之间、第b2列和第b2+1列之间、…、第b L列和第b L+1列之间要开辟通道,其中b i< b i+1,每两个整数之间用空格隔开(行尾没有空格)。
【输入输出样例解释】1 2 3 4 5上图中用符号*、※、+ 标出了3对会交头接耳的学生的位置,图中3条粗线的位置表示通道,图示的通道划分方案是唯一的最佳方案。
NOIP2008普及组复赛试题(附题解)
全国信息学奥林匹克联赛NOIP2008复赛普及组注意事项:1、文件名(程序名和输入输出文件名)必须使用小写。
2、C/C++中函数main()的返回值类型必须是int,程序正常结束时的返回值必须是0。
3、全国统一评测时采用的机器配置为:CPU 1.9GHz,内存512M,上述时限以此配置为准。
各省在自测时可根据具体配置调整时限。
1.ISBN号码(isbn.pas/c/cpp)【问题描述】每一本正式出版的图书都有一个ISBN号码与之对应,ISBN码包括9位数字、1位识别码和3位分隔符,其规定格式如“x-xxx-xxxxx-x”,其中符号“-”是分隔符(键盘上的减号),最后一位是识别码,例如0-670-82162-4就是一个标准的ISBN码。
ISBN码的首位数字表示书籍的出版语言,例如0代表英语;第一个分隔符“-”之后的三位数字代表出版社,例如670代表维京出版社;第二个分隔之后的五位数字代表该书在出版社的编号;最后一位为识别码。
识别码的计算方法如下:首位数字乘以1加上次位数字乘以2……以此类推,用所得的结果mod 11,所得的余数即为识别码,如果余数为10,则识别码为大写字母X。
例如ISBN号码0-670-82162-4中的识别码4是这样得到的:对067082162这9个数字,从左至右,分别乘以1,2,…,9,再求和,即0×1+6×2+……+2×9=158,然后取158 mod 11的结果4作为识别码。
你的任务是编写程序判断输入的ISBN号码中识别码是否正确,如果正确,则仅输出“Right”;如果错误,则输出你认为是正确的ISBN号码。
【输入】输入文件isbn.in只有一行,是一个字符序列,表示一本书的ISBN号码(保证输入符合ISBN号码的格式要求)。
【输出】输出文件isbn.out共一行,假如输入的ISBN号码的识别码正确,那么输出“Right”,否则,按照规定的格式,输出正确的ISBN号码(包括分隔符“-”)。
noip普及组复赛模拟试题12答案
【试题描述】读入二行整数,然后程序要完成如下的操作:第一步将2行数合并在一起,第二步将合并好的数由大到小排序,第三步重新排列,从第一个数起开始编号,然后将奇数号上的数(样例中的13,9,5)从前向后排,偶数号上的数(样例中的12,7,4)从后往前排。
第四步计算,将排好的数,第一个+第二个数的2倍+第三个数的3倍+…第五步:输出计算的结果。
【输入描述】第一行是一个整数 n(1≤n≤10),第二行有n个整数,整数范围在1~100之间,数与数之间空格隔开。
第三行是一个整数 m(1≤m≤10),第四行有m个整数,整数范围在1~100之间,数与数之间空格隔开。
【输出描述】一个整数(最后计算的结果)。
【输入样例】412 4 5 9213 7【输出样例】 169【解题提示】样例说明:第一步合并后为:12 4 5 9 13 7第二步上例中的数成为:13 12 9 7 5 4第三步得到:13 9 5 4 7 12第四步计算后为:13+2×9+3×5+4×4+5×7+6×12=169最后输出 169【试题来源】 2008年江苏省小学生信息学(计算机)奥赛program ex1731;var m,n,i,j,s,t,b1,b2:integer;a,b,c:array[1..20] of integer;sum:longint;beginreadln(n);for i:=1 to n do read(a[i]);readln(m);for i:=1 to m do read(a[i+n]);s:=m+n;for i:=1 to s-1 dofor j:=i+1 to s doif a[i]<a[j] then begint:=a[i];a[i]:=a[j];a[j]:=t;end;b1:=0;b2:=0;for i:=1 to s doif i mod 2=1 then begin inc(b1); b[b1]:=a[i];endelse begin inc(b2); c[b2]:=a[i];end;for i:=1 to b1 do a[i]:=b[i];for i:=1 to b2 do a[b1+i]:=c[b2-i+1];sum:=0;for i:=1 to s dosum:=sum+i*a[i];writeln(sum);end.输入 615 34 25 9 22 39423 17 46 57输出1496输入1015 34 25 9 22 39 47 12 33 99823 17 46 57 51 8 38 64输出5687SHLQSH数问题描述:我们把t1 , t2 (包括t1 , t2 (1<=t1<t2<=10000000))之间的所有数的约数个数和n称为t1 , t2的shlqsh数;问题是给出数据t1 , t2后,求t1 , t2的shlqsh数;输入输入文件shlqsh.in 仅包含一行,共有两个整数,表示t1 t2 (用空格分开)输出输出文件shlqsh.out 仅有一个整数,表示t1 , t2之间的shlqsh数。
1995-2008复赛试题及解析
NOIP1995年复赛试题1. 设有下列的算式:求出□中的数字,并打印出完整的算式来。
8 0 9 ------------- □□) □□□□ □□------------- □□□ □□□ ------------- 12. 方阵填数:在一个N ⨯N 的方阵中,填入1,2,……N ⨯N 个数,并要求构成如下的格式: 例:3. 若将一个正整数化为二进制数,在此二进制数中,我们将数字1的个数多于数字0的个数的这类二进制数称为A 类数,否则就称其为B 类数。
例如:(13)10=(1101)2 其中1的个数为3,0的个数为1,则称此数为A 类数; (10)10=(1010)2 其中1的个数为2,0的个数也为2,称此数为B 类数; (24)10=(11000)2 其中1的个数为2,0的个数为3,则称此数为B 类数; 程序要求:求出1~1000之中(包括1与1000),全部A 、B 两类数的个数。
4.编码问题:设有一个数组A:ARRAY[0..N-1] OF INTEGER ;数组中存放的元素为0~N-1之间的整数,且A[i]≠A[j](当i ≠j 时)。
例如:N=6时,有: A=(4,3,0,5,1,2) 此时,数组A 的编码定义如下: A[0]的编码为0;A[i]的编码为:在A[0],A[1],……A[i-1]中比A[i]的值小的个数(i=1,2……N-1) ∴上面数组A 的编码为:B=(0,0,0,3,1,2)程序要求解决以下问题:给出数组A 后,求出其编码;给出数组A 的编码后,求出A 中的原数据。
5. 灯的排列问题:设在一排上有N 个格子(N ≤20),若在格子中放置有不同颜色的灯,每种灯的个数记为N 1,N 2,……N k (k 表示不同颜色灯的个数)。
放灯时要遵守下列规则:同一种颜色的灯不能分开;不同颜色的灯之间至少要有一个空位置。
例如:N=8(格子数) R=2(红灯数) B=3(蓝灯数) 放置的方法有:N=513 14 15 16 1 12 23 24 17 2 11 22 25 18 3 10 21 20 19 4 9 8 7 6 5N=616 17 18 19 20 1 153****221214 29 36 33 22 3 132****423412 27 26 25 24 5 11 10 9 8 7 6B-R 顺序放置的总数为12种。
noip普及组复赛入门测试(答案+测试数据)
一、新龟兔赛跑(文件名xgtsp.pas)新龟兔赛跑比赛即将举行,此次龟兔赛跑比赛的规则与以往有所不同,不再考察兔子和乌龟谁在最短的时间内跑完规定的路程,而是考察谁在规定时间内跑的路程更长,且兔子和乌龟跑步都是匀速的。
由于兔子的坏习惯,它总喜欢把比赛的总时间T小时中的K小时拿来睡觉。
现在给你比赛的总时间T、兔子的睡觉时间K、兔子的速度U、乌龟的速度V,需要你求出该次比赛谁最后获胜。
输入第一行为一个整数X,表示有X组输入数据。
每组数据只有一行,包括4个数T、K、U、V (1 ≤ T≤ 300,0 ≤ K ≤ T,1 ≤ U ≤ 100,1 ≤ V ≤ 100)。
对于每组数据,输出只有一个数,如果兔子获胜则输出-1,如果乌龟获胜则输出1,如果同时到达则输出0。
允许输入一组数后立即输出对应的结果。
样例输入:21 12 16 2 6 3样例输出:1-1varv,u,t,k,n,i:integer;beginreadln(n);for i:=1 to n do beginreadln(t,k,u,v);if v*t>U*(t-k) then writeln(1);if v*t<U*(t-k) then writeln(-1);if v*t=U*(t-k) then writeln(0);end;end.1、输入:26 2 6 28 6 8 2输出:-12、输入:2300 280 60 20120 0 12 13输出:113、输入:3100 20 50 30100 50 45 25100 80 27 17输出:-1114、输入:3150 77 29 23127 11 22 13139 22 13 7输出:1-1-1二、小球路程(文件名:XQLC.PAS )已知小球从100米高度自由下落,落地后反弹起,又落地,又弹起,……。
每次弹起的高度都是上一次高度的一半。
求小球第N次反弹起的高度和球在整个过程所经过的路程(包括下落和反弹),用键盘输入N,输出反弹高度和经过路程,结果保留两位小数。
NOIP2008普及组复赛思路及程序(PASCAL)
第一题Program Gy;ConstName='isbn';VarA,B:String;Procedure Inp;BeginAssign(Input,Name+'.in');Reset(Input); Assign(Output,Name+'.out');Rewrite(Output); Readln(A);End;Procedure Main;Var i,j,k:Longint;Beginj:=0;k:=0;For i:=1 to Length(A)-1 doIf A[i]in['0'..'9']thenBeginInc(k);j:=j+(Ord(A[i])-Ord('0'))*k;End;j:=j mod 11;B:=A;If j=10 then B[Length(B)]:='X'Else B[Length(B)]:=Chr(j+Ord('0')); End;Procedure Oup;BeginIf B=A then Writeln('Right')Else Writeln(B);Close(Input);Close(Output);End;BeginInp;Main;Oup;End.第二题Program Gy;Uses Math;ConstName='seat';Varx1,y1,x2,y2:Array[1..3000]of Longint;N,M,K,L,D:longint;A,C:Array[1..2,1..2000]of Longint;B1,B2:Array[1..2000]of Byte;Procedure Inp;Var i:longint;BeginAssign(Input,Name+'.in');Reset(Input);Assign(Output,Name+'.out');Rewrite(Output); Randomize;Readln(M,N,K,L,D);For i:=1 to D do Readln(x1[i],y1[i],x2[i],y2[i]); End;Procedure Sort(p,l,r:Longint);Var i,j,x,y:Longint;Begini:=l;j:=r;x:=a[p,Random(r-l)+l];RepeatWhile a[p,i]>x do Inc(i);While a[p,j]<x do Dec(j);If i<=j thenBeginy:=a[p,i];a[p,i]:=a[p,j];a[p,j]:=y;y:=c[p,i];c[p,i]:=c[p,j];c[p,j]:=y;Inc(i);Dec(j);End;Until i>j;If l<j then Sort(p,l,j);If i<r then Sort(p,i,r);End;Procedure Main;Var i:Longint;BeginFor i:=1 to M do C[1,i]:=i;For i:=1 to N do C[2,i]:=i;For i:=1 to d doIf x1[i]=x2[i]then Inc(A[2,Min(y1[i],y2[i])]) Else Inc(A[1,Min(x1[i],x2[i])]);Sort(1,1,N);Sort(2,1,M);For i:=1 to K do B1[C[1,i]]:=1;For i:=1 to L do B2[C[2,i]]:=1;End;Procedure Oup;Var i,j:Longint;Beginj:=0;For i:=1 to M-1 doIf b1[i]=1 thenBeginInc(j);Write(i);If j<>K then Write(' '); End;Writeln;j:=0;For i:=1 to N-1 doIf b2[i]=1 thenBeginInc(j);Write(i);If j<>L then Write(' '); End;Writeln;Close(Input);Close(Output);End;BeginInp;Main;Oup;End.第三题Program Gy;Uses Math;ConstName='ball';VarF:Array[0..1,1..500]of Longint;M,N:Longint;Procedure Inp;BeginAssign(Input,Name+'.in');Reset(Input); Assign(Output,Name+'.out');Rewrite(Output); Readln(n,m);End;Procedure Main;Var i,j:Longint;BeginF[0,1]:=1;For i:=1 to M doFor j:=1 to N doF[i mod 2,j]:=F[(i-1)mod 2,(j+n-2)mod n+1]+F[(i-1)mod 2,(j+n)mod n+1]; End;Procedure Oup;BeginWriteln(F[M mod 2,1]);Close(Input);Close(Output);End;BeginInp;Main;Oup;End.第四题Program Gy;ConstWork='drawing';TypeRec=RecordX,Y:longint;Arr=Array[1..20000] of Longint;VarA:Array[1..300,1..300] of Longint;N,M,MaxN,MaxM:Longint;B:Array[1..1000,1..1000]of Char;Procedure Inp;Var i,j:Longint;BeginAssign(Input,Work+'.in');Reset(Input);Assign(Output,Work+'.out');Rewrite(Output);Read(n,m);For i:=1 to N doFor j:=1 to M doRead(a[n+1-i,j]);MaxN:=0;MaxM:=0;For i:=1 to N doFor j:=1 to M doBeginIf 2*i+4*j+1>MaxM then MaxM:=2*i+4*j+1;If (2*i+3*a[i,j]+1>MaxN) then Maxn:=2*i+3*a[i,j]+1; End;For i:=1 to MaxN doFor j:=1 to MaxM doB[i,j]:='.';Procedure Main;Var i,j,k,x,y:Longint; BeginFor i:=N downto 1 do For j:=1 to M doFor k:=1 to A[i,j] do BeginY:=2*i+4*j-5;X:=2*i+3*k-4; B[x,y]:='+';B[x,y+1]:='-';B[x,y+2]:='-';B[x,y+3]:='-';B[x,y+4]:='+';B[x+1,y]:='|';B[x+1,y+1]:=' ';B[x+1,y+2]:=' ';B[x+1,y+3]:=' ';B[x+1,y+4]:='|';B[x+1,y+5]:='/';B[x+2,y]:='|';B[x+2,y+1]:=' ';B[x+2,y+2]:=' ';B[x+2,y+3]:=' ';B[x+2,y+4]:='|'; B[x+2,y+5]:=' '; B[x+2,y+6]:='+'; B[x+3,y]:='+';B[x+3,y+1]:='-'; B[x+3,y+2]:='-'; B[x+3,y+3]:='-'; B[x+3,y+4]:='+'; B[x+3,y+5]:=' '; B[x+3,y+6]:='|'; B[x+4,y+1]:='/'; B[x+4,y+2]:=' '; B[x+4,y+3]:=' '; B[x+4,y+4]:=' '; B[x+4,y+5]:='/'; B[x+4,y+6]:='|'; B[x+5,y+2]:='+'; B[x+5,y+3]:='-'; B[x+5,y+4]:='-'; B[x+5,y+5]:='-'; B[x+5,y+6]:='+'; End;End; Procedure Oup;Var i,j:Longint;BeginFor i:=MaxN downto 1 do BeginFor j:=1 to MaxM do Write(b[i,j]);Writeln;End;Close(Input);Close(Output);End;BeginInp;Main;Oup;End.第3题要一步一步算,程序如下varm,n,i,j:integer;a:array[-30..30,0..30]of longint; beginassign(input,'ball.in');reset(input);assign(output,'ball.out');rewrite(output);read(m,n);for i:=-n to n doif i mod m=0then a[i,n]:=1else a[i,n]:=0;for i:=n-1 downto 0 dofor j:=-i to i doa[j,i]:=a[j 1,i 1] a[j-1,i 1];writeln(a[0,0]);close(input);close(output)end.第四题的话,要按从上到下一层一层的覆盖,并且要先算出输出图形的大小,程序如下(不好意思,因为本人水平问题,这个程序只能通过小的数据)vars:array[1..150]of string;a:array[1..50,1..50]of integer;m,n,i,j,p,q,k,l,x,y:integer;beginassign(input,'drawing.in');reset(input);assign(output,'drawing.out');rewrite(output);read(m,n);for i:=1 to m dofor j:=1 to n doread(a[i,j]);p:=4*n 1 2*m;q:=0;for i:=1 to m dofor j:=1 to n doif 3*a[i,j] 3 2*m-2*i>q then q:=3*a[i,j] 3 2*m-2*i; for i:=1 to q dobegins[i]:='';for j:=1 to p dos[i]:=s[i] '.'end;for i:=1 to m dobeginx:=q-2*m 2*i;for j:=1 to n dobeginy:=1 2*m-2*i (j-1)*4;s[x][y]:=' ';s[x][y 4]:=' ';for k:=1 to 3 dos[x][y k]:='-';s[x-1][y 1]:='/';s[x-1][y 5]:='/';s[x-2][y 2]:=' ';s[x-2][y 6]:=' ';for k:=1 to a[i,j] dobeginfor l:=1 to 2 dobegins[x-l-3*(k-1)][y]:='|';s[x-l-3*(k-1)][y 4]:='|'; s[x-1-l-3*(k-1)][y 5]:=' '; s[x-2-l-3*(k-1)][y 6]:='|' end;s[x-3*k][y]:=' ';s[x-3*k][y 4]:=' ';for l:=1 to 3 dobegins[x 1-3*k][y l]:=' ';s[x 2-3*k][y l]:=' 'end;s[x-2-3*k][y 2]:=' ';s[x-2-3*k][y 6]:=' ';for l:=1 to 3 dos[x-1-3*k][y 1 l]:=' ';s[x-1-3*k][y 1]:='/';s[x-1-3*k][y 5]:='/';for l:=1 to 3 dobegins[x-3*k][y l]:='-';s[x-3*k-2][y l 2]:='-'endend;endend;for i:=1 to q dowriteln(s[i]);close(input);close(output)end.以上是推荐回答,你可以参考如下其他回答相关问题• 求个NOIP复赛用的标准PASCAL,告诉我下载地址• 找 NOIP 2007 提高组复赛的解题报告(free pascal)• noip复赛什么时候举行?• 请问NOIP复赛中的输入输出文件需要自己制作还是比赛前就提供好的?• 请问pascal一道NOIP题目,有关逻辑判断设计江湖为你用户的其他回答参考: 其他答案我也错了请问你是怎么知道成绩的啊?谢谢第三题:首先利用DP计算杨辉三角形的第n-1层,存入数组a,如果m是偶数则将a的正中那个数存入s,否则将0存入s,再将a数组中n的倍数加入s.就5分,不写了第四题:昨天奋斗了1小时,发现自己在考试时编的程序有问题..按照我考试时写的那个程序是不能出现0的..恩,扯远了.只要先将所有数据读入,计算字符串数组顶格的偏移值s1,然后从左往右,从下往上,从后往前画正方体,最后再将左端的'.'删除就可以了.只有C的源代码:#include <stdio.h>char s[501][402];void drawing(int px,int py,int n){int i;s[px][py 2]=' ';for(i=3;i<6;i )s[px][py i]='-';s[px][py 6]=' ';s[px 1][py 1]='/';for(i=2;i<5;i )s[px 1][py i]=' ';s[px 1][py 5]='/';s[px 2][py]=' ';for(i=1;i<4;i )s[px 2][py i]='-';s[px 2][py 4]=' ';for(i=1;i<=n;i ){s[px 3*i][py]=s[px 3*i 1][py]=s[px 3*i][py 4]=s[px 3*i 1][py 4]=s[px 3*i-2][py 6]=s[px 3*i-1][py 6]='|';s[px 3*i][py 1]=s[px 3*i][py 2]=s[px 3*i][py 3]=s[px 3*i 1][py 1]=s[px 3*i 1][py 2]=s[px 3*i 1][py 3]=s[px 3*i-1][py 5]=s[px 3*i][py 5]=' ';s[px 3*i][py 6]=s[px 3*i 2][py]=s[px 3*i 2][py 4]=' ';s[px 3*i 2][py 1]=s[px 3*i 2][py 2]=s[px 3*i 2][py 3]='-'; s[px 3*i 1][py 5]='/';}}int main(){FILE *in,*out;int m,n,i,j,s1=0,k;in=fopen("drawing.in","r");out=fopen("drawing.out","w");fscanf(in,"%d%d",&m,&n);for(i=0;i<501;i ){for(j=0;j<2*m 4*n 1;j ){s[i][j]='.';}s[i][j]='\0';}for(i=0;i<m;i ){for(j=0;j<n;j ){fscanf(in,"%d",&k);s1=2*i s1-k*3<0?k*3-2*i:s1;}}fseek(in,0,0);fscanf(in,"%d%d",&m,&n);for(i=0;i<m;i ){for(j=0;j<n;j ){fscanf(in,"%d",&k);if(k)drawing(2*i s1-k*3,2*m-2*i-2 4*j,k);}}k=0;for(j=0;j<2*m 4*n 1;j ){for(i=0;i<s1 2*m 1;i ){if(s[i][j]!='.'){j=402;break;}}if(j!=402)k ;}for(i=0;i<s1 2*m 1;i ){fprintf(out,"%s ",s[i] k);}fclose(in); fclose(out); return 0;}。
NOIP2008普及组初赛试题(附答案)
NOIP2008普及组初赛试题+答案第十四届全国青少年信息学奥林匹克联赛初赛试题(普及组Pascal语言二小时完成)●●全部试题答案均要求写在答卷纸上,写在试卷纸上一律无效一、单项选择题(共20题,每题1.5分,共计30分。
每题有且仅有一个正确答案.)。
1.微型计算机中,控制器的基本功能是:A.控制机器各个部件协调工作B.实现算术运算和逻辑运算C.获取外部信息D.存放程序和数据2.设A=TRUE B=fALSE C=TRUE D=fALSE以下逻辑运算中表达式值为真的是:A.(A∧B)∨(C∧D∨┐A)B.((┐A∧B)∨C)∧┐D)C.(B∨C∨D)∧D∧AD.A∧(D∨┐C)∧B3.在下列关于图灵奖的说法中,不正确的是:A.图灵奖是美国计算机协会于1966年设立的,专门奖励那些对计算机事业做出重要贡献的个人B.图灵奖有计算机界诺贝尔奖的称号C.迄今为止,还没有华裔计算机科学家获此殊荣D.图灵奖的名称取自计算机科学的先驱、英国科学家阿兰•图灵4.计算机在工作过程中,若突然停电,()中的信息不会丢失。
A.ROM和RAMB.CPUC.ROMD.RAM5.完全二叉树共有2n-1个节点,则它的叶节点数为:A.N-1B.NC.2*ND.2^N-16.在下列各项中,()不是操作系统软件。
A.SolarisB.linuxC.Windows VistaD.Sybase7.设栈S的初始状态为空,元素A,B,C,D,E,f依次入栈S,出栈的序列为B,D,f,E,C,A,则栈S 的容量至少应该是:A.6B.5C.4D.38.与十进制数28.5625相等的四进制数是:A.123.21B.131.22C.130.22D.130.219.设字符串S="Olympic",S的非空字串的数目为A.28B.29C.16D.1710.Web2.0是近年来互联网的热门概念之一,其核心思想是互动与分享,下列网站中,()是典型的Web2.0应用。
noip普及组复赛答案
noip普及组复赛答案【篇一:noip普及组复赛入门测试(答案+测试数据)】class=txt>新龟兔赛跑比赛即将举行,此次龟兔赛跑比赛的规则与以往有所不同,不再考察兔子和乌龟谁在最短的时间内跑完规定的路程,而是考察谁在规定时间内跑的路程更长,且兔子和乌龟跑步都是匀速的。
由于兔子的坏习惯,它总喜欢把比赛的总时间t小时中的k小时拿来睡觉。
现在给你比赛的总时间t、兔子的睡觉时间k、兔子的速度u、乌龟的速度v,需要你求出该次比赛谁最后获胜。
输入第一行为一个整数x,表示有x组输入数据。
每组数据只有一行,包括4个数t、k、u、v (1 ≤ t≤ 300,0 ≤ k ≤ t,1 ≤ u ≤ 100,1 ≤ v ≤ 100)。
对于每组数据,输出只有一个数,如果兔子获胜则输出-1,如果乌龟获胜则输出1,如果同时到达则输出0。
允许输入一组数后立即输出对应的结果。
样例输入:21 12 16 2 6 3样例输出:1-1varv,u,t,k,n,i:integer;beginreadln(n);for i:=1 to n do beginreadln(t,k,u,v);if v*tu*(t-k) then writeln(1);if v*tu*(t-k) then writeln(-1);if v*t=u*(t-k) then writeln(0);end;end.1、输入:26 2 6 28 6 8 2输出:-12、输入:2300 280 60 20120 0 12 13输出:113、输入:3100 20 50 30100 50 45 25100 80 27 17输出:-1114、输入:3150 77 29 23127 11 22 13139 22 13 7输出:1-1-1二、小球路程(文件名:xqlc.pas )已知小球从100米高度自由下落,落地后反弹起,又落地,又弹起,??。
每次弹起的高度都是上一次高度的一半。
noip2008 初赛普及组c++试题及答案
第十四届全国青少年信息学奥林匹克联赛初赛试题(普及组 C++语言二小时完成)●●全部试题答案均要求写在答卷纸上,写在试卷纸上一律无效●●一、单项选择题(共20题,每题1.5分,共计30分。
每题有且仅有一个正确答案.)。
1.微型计算机中,控制器的基本功能是()。
A. 控制机器各个部件协调工作B. 实现算术运算和逻辑运算C. 获取外部信息D. 存放程序和数据2. 设A=true,B=false,C=true,D=false,以下逻辑运算表达式值为真的是()。
A. (A∧B)∨(C∧D∨⌝A)B. ((⌝A∧B)∨C)∧⌝DC. (B∨C∨D)∧D∧AD. A∧(D∨⌝C)∧B3. 在下列关于图灵奖的说法中,不正确的是()。
A. 图灵奖是美国计算机协会于1966年设立的,专门奖励那些对计算机事业作出重要贡献的个人B. 图灵奖有“计算机界诺贝尔奖”之称C. 迄今为止,还没有华裔计算机科学家获此殊荣D. 图灵奖的名称取自计算机科学的先驱、英国科学家阿兰·图灵4.计算机在工作过程中,若突然停电,()中的信息不会丢失。
A. ROM和RAMB. CPUC.ROMD. RAM5.完全二叉树共有2*N-1个结点,则它的叶节点数是()。
A. N-1B. NC. 2*ND. 2N-16. 在以下各项中,()不是操作系统软件。
A. SolarisB. LinuxC. Windows VistaD. Sybase7.设栈S的初始状态为空,元素a,b,c,d,e,f依次入栈S,出栈的序列为b,d,f,e,c,a,则栈S的容量至少应该是()。
A. 6B. 5C. 4D. 38. 与十进制数28.5625相等的四进制数是()。
A. 123.21B. 131.22C. 130.22D. 130.219. 设字符串S=”Olympic”,S的非空子串的数目是()。
A. 28B. 29C. 16D. 1710.Web2.0是近年来互联网的热门概念之一,其核心思想是互动与分享。
NOIP2008初赛普及组C++题目及参考答案
第十四届全国青少年信息学奥林匹克联赛初赛试题2008(普及组 C++语言二小时完成)●●全部试题答案均要求写在答卷纸上,写在试卷纸上一律无效●●一、单项选择题(共20题,每题1.5分,共计30分。
每题有且仅有一个正确答案.)。
1.微型计算机中,控制器的基本功能是()。
,a,则A. 28B. 29C. 16D. 1710.Web2.0是近年来互联网的热门概念之一,其核心思想是互动与分享。
下列网站中,()是典型的Web2.0应用。
A. SinaB. FlickrC. YahooD. Google11.递归过程或函数调用时,处理参数和返回地址,通常使用一种称为()的数据结构。
A. 队列B. 多维数组C. 线性表D. 栈12. (2008)10 + (5B)16的结果是()。
精心整理A. (833)16B. (2089)10C. (4163)8D. (100001100011)213. 二叉树T,已知其先根遍历是1 2 4 3 5 7 6(数字为结点的编号,以下同),中根遍历是2 4 1 57 3 6,则该二叉树的后根遍历是()。
A. 4 2 5 7 6 3 1B. 4 2 7 5 6 3 1C. 7 4 2 5 6 3 1D. 4 2 7 6 5 3 114.将数组{8, 23, 4, 16, 77, -5, 53, 100}中的元素按从大到小的顺序排列,每次可以交换任意两个元素,最少需要交换()次。
等。
二.问题求解(共2题,每题5分,共计10分)1. 书架上有4本不同的书A、B、C、D。
其中A和B是红皮的,C和D是黑皮的。
把这4本书摆在书架上,满足所有黑皮的书都排在一起的摆法有_____种。
满足 A必须比C靠左,所有红皮的书要摆放在一起,所有黑皮的书要摆放在一起,共有______种摆法。
2.有6个城市,任何两个城市之间都有一条道路连接,6个城市两两之间的距离如下表所示,则城市1精心整理2.#include<iostream>using namespace std;void foo(int a, int b, int c){if(a > b)foo(c, a, b);else精心整理cout<<a<<','<<b<<','<<c<<endl;}int main(){int a, b, c;cin >> a >> b >> c;foo(a, b, c);}int main(){int a[20], i, m;m=10;精心整理for(i=0; i<m; i++){cin>>a[i];}func(a, m);for (i=0; i<m; i++)cout<<a[i]<<" ";solve(first, spos_f + 1, spos_f + (root_m - spos_m), mid, spos_m, root_m - 1); solve(first, spos_f + (root_m - spos_m) + 1, epos_f, mid, root_m + 1, epos_m);cout << first[spos_f];}int main(){精心整理char first[MAX], mid[MAX];int len;cin >> len;cin >> first >> mid;solve(first, 0, len - 1, mid , 0, len - 1);cout << endl;return 0;S,第S中的bfor (i = 0;i < 26;i ++){if ( ① )change[i] -= 'A' - 'a';}}精心整理void ChangeString(){int i;for (i = 0;i <strlen(str);i ++){if ( ② )str[i] = change[str[i] - 'A'] -'a' + 'A';6}中int a[1000001],n,ans = -1;void swap(int &a,int &b){int c;c = a; a = b; b = c;}精心整理int FindKth(int left, int right, int n){int tmp,value,i,j;if (left == right) return left;tmp = rand()% (right - left) + left;swap(a[tmp],a[left]);cin >> n;ans = FindKth(1,m,n);cout << a[ans];return 0;}精心整理参考答案一.选择题ABCCB DCDAB DABBB ABABD二.问题解答1.12 4精心整理2.7三.阅读程序1.232. 2.,3,13. 5 4 10 1 6 22 -59 -6 -11 -64. DBGEFCA四.完善程序1.(1)change[i] >= 'A' && change[i] <= 'Z'(只写change[i] <= 'Z'也对)精心整理。
2008年NOIP普及组初赛试题及参考答案
一、选择题
14. 将数组{8,23,4,16,77,-5,53,100}中的元素按从大到小的顺序排 列,每次可以交换任意两个元素,最少需要交换( )次。 A. 4 B. 5 C. 6 D. 7
│ 15
一、选择题
15. 对有序数组{5,13,19,21,37,56,64,75,88,92,100}进行二分查 找,成功查找元素 19 的查找长度(比较次数)是( )。 A. 1 B. 2 C. 3 D. 4
│ 22
二、问题解答
2. 有 6 个城市,任何两个城市之间都有一条道路连接,6 个城市两两之间的距离如表所示,则城市 1到城市 6 的最短 距离为 。
│ 23
三、程序完善
第一题:(字符串替换)给定一个字符串 S(S 仅包含大小写字母),下面的程序 将 S 中的每个字母用规定的字母替换,并输出 S 经过替换后的结果。程序的输入是 两个字符串,第一个字符串是给定的字符串 S,第二个字符串 S’由 26个字母组成 ,它是 a-z 的任一排列,大小写不定,S’规定了每个字母对应的替换字母:S’中 的第一个字母是字母A 和 a 的替换字母,即 S 中的 A 用该字母的大写替换,S 中 的 a 用该字母的小写替换;S’中的第二个字母是字母 B和 b 的替换字母,即 S 中 的 B 用该字母的大写替换,S 中的 b 用该字母的小写替换;……以此类推。
1:A 2:B 3:C 4:C 5:B 6:D 7:C 8:D 9:A 10:B 11:D 12:A 13:B 14:B 15:B 16:A 17:B 18:A 19:B 20:D
二、问题解答 1:12 4 2:7 三:程序阅读 1、23 2:2,3,1 3:5 4 10 1 6 22 -59 -6 -11 -6 4:DBGEFCA 四、程序完善 1: change[i]>='A' && change[i] <='Z' str[i]>='A' && str[i] <='Z'
NOIP2008南海区普及组复赛模拟测试题
NOIP2008南海区普及组复赛模拟测试题㈠(测试时间:2008年11月1日上午)注意事项:1.严格按照题目要求的格式进行输入、输出,否则严重影响得分。
2.题目测试数据有严格时间限制,超时不得分。
3.输入文件格式不用判错;输入输出文件名均已给定,不用键盘输入。
4.程序完成后,要按指定的提交文件名编译成EXE文件,评卷时以EXE文件为准。
5.选手要同时将EXE文件和源程序(PAS)提交。
6.全卷400分,三小时完成。
第一题奶牛式乘法输入文件: cowmul.in输出文件: cowmul.out问题描述:做厌了乘法计算题的贝茜,自创了一种新的乘法运算法则。
在这套法则里,A*B等于一个取自A、一个取自B的所有数字对的乘积的和。
比方说,123*45等于1*4 + 1*5 + 2*4 + 2*5 + 3*4 + 3*5 = 54。
对于2个给定的数A、B(1 < = A, B < = 1,000,000,000),你的任务是,用新的乘法法则计算A*B 的值。
输入格式:输入文件只有一行,是2个用空格隔开的整数:A、B输出格式:输出文件共一行,输出1个整数,即新的乘法法则下A*B的值输入样例(cowmul.in):123 45输出样例(cowmul.out):54第二题晚餐队列安排输入文件: dining.in输出文件: dining.out问题描述:为了避免餐厅过分拥挤,FJ要求奶牛们分2批就餐。
每天晚饭前,奶牛们都会在餐厅前排队入内,按FJ的设想,所有第2批就餐的奶牛排在队尾,队伍的前半部分则由设定为第1批就餐的奶牛占据。
由于奶牛们不理解FJ的安排,晚饭前的排队成了一个大麻烦。
第i头奶牛有一张标明她用餐批次D_i(1 < = D_i < = 2)的卡片。
虽然所有N(1 < = N < = 30,000)头奶牛排成了很整齐的队伍,但谁都看得出来,卡片上的号码是完全杂乱无章的。
2008NOIP
1. 2. 3. 4. 5.
6.
7. 8. 9. 10. 11. 12. 13. 14. 15. 16.
17.
18. 19.
100 100 90 10 300 100 100 60 30 290 * 100 100 60 30 290 100 100 60 30 290 100 90 100 0 290 100 90 90 10 290 100 40 100 30 270 100 100 60 10 270 100 100 40 30 270 100 80 70 10 260 100 100 30 30 260 100 100 30 30 260 100 100 30 30 260 100 100 30 30 260 100 90 40 30 260 100 100 30 20 250 100 100 30 20 250 90 100 30 30 250 * 90 100 30 30 250
【问题描述】 笨小猴的词汇量很小,所以每次做英语选择题的时候都很头痛。但是他找到了一种方法, 经实验证明,用这种方法去选择选项的时候选对的几率非常大! 这种方法的具体描述如下:假设maxn单词中出现次数最多的字母的出现次数,minn是单 词中出现次数最少的字母的出现次数,如果maxn-minn是一个质数,那么笨小猴就认为这 是个Lucky Word,这样的单词很可能就是正确的答案。 【输入】 输入文件word.in只有一行,是一个单词,其中只可能出现小写字母,并且长度小于100。 【输出】 输出文件word.out共两行,第一行是一个字符串,假如输入的单词是Lucky Word,那 么输出“Lucky Word”,否则输出“No Answer”; 第二行是一个整数,如果输入单词是Lucky Word,输出maxn—minn的值,否则输出0。 【输入输出样例1】 word.in error 【输入输出样例1解释】 word.out 单词error中出现最多的字母r出现了3次,出 Lucky Word 现次数最少的字母出现了1次,3-1=2,2是质 2 数。 【输入输出样例2】 word.in 【输入输出样例2解释】 olymipic 单词olymipic中出现最多的字母i出现了2次, word.out 出现次数最少的字母出现了1次,2-1=1,1不 No Answer 是质数。 0
1995-2008 历届NOIP试题及详解
N1=1
Q
排列方案: R
⑤ 排数列据总输数入=:6 N=6 R
P1=R
N1=2 R
P2=Y Q
N2=1 R
R
⑥排数列据方输案入::N=R12 R
Y
R
排列总数=12 P1=RR R N1= 3 Y
P2=RB R N2=2
Y
P3=Y R N3R=1
Y
Q
RR
Y
排列方案:
RR
<8> 本题排共列40总分数(:12%+14%R+14R%) R
BBB
RR
N
P1(颜色,为一个字母) N1(灯的数量)
P2
N2
……
Q(结束标记,Q 本身不是灯的颜色)
程序要求:求出一种顺序的排列方案及排列总数。
<3> 设有一个四层的积木块,1~4 层积木块的数量依次为:5,6,7,8
如下图所示放置:
8 15 8 5 16 9 14
23414326 其中,给出第三层与第四层所标示的数字,并已知第三层的数据是由第四层的数据计算出
输出: A=(3,2,1,0,4,5,6)
<5> 本题共 30 分(10%+10%+10%)
① 数据输入: N=6
P1=R
N1=1
Q
排列方案: R ② 排数列据总输数入=:6 N=6 R
P1=R
NR1=2
P2=Y
N2=1 R
Q
R
排列方案: R ③ 排数列据总输数入=:12N=1R2
P1=RR
R
Y
R R N1= 3
(10)10=1(1 110010)9 2 8 7 6
NOIP2008普及组复赛试题
全国信息学奥林匹克联赛(NOIP2008)复赛普及组一.题目概览中文题目名称ISBN号码排座椅传球游戏立体图英文题目名称isbn seat ball drawing可执行文件名isbn seat ball drawing输入文件名isbn.in seat.in ball.in drawing.in输出文件名isbn.out seat.out ball.out drawing.out每个测试点时限1秒1秒1秒1秒测试点数目10 10 10 10每个测试点分值10 10 10 10比较方式全文比较全文比较全文比较全文比较题目类型传统传统传统传统二.提交源程序文件名对于pascal语言isbn.pas seat.pas ball.pas drawing.pas对于C语言isbn.c seat.c ball.c drawing.c对于C++语言isbn.cpp seat.cpp ball.cpp drawing.cpp三.编译命令(不包含任何优化开关)对于pascal语言fpc isbn.pas fpc seat.pas fpc ball.pas fpc drawing.pas对于C语言gcc –o isbnisbn.c gcc –o seatseat.c gcc –o ballball.c gcc –o drawingdrawing.c对于C++语言g++ –o isbnisbn.cpp g++ –o seatseat.cpp g++ –o ballball.cpp g++ –odrawingdrawing.cpp四.运行内存限制运行内存上限50M 50M 50M 50M注意事项:1、文件名(程序名和输入输出文件名)必须使用小写。
2、C/C++中函数main()的返回值类型必须是int,程序正常结束时的返回值必须是0。
3、全国统一评测时采用的机器配置为:CPU 1.9GHz,内存512M,上述时限以此配置为准。
第十四届全国青少年信息学奥林匹克联赛(普P&C)试题及答案
NOIP2008第十四届全国青少年信息学奥林匹克联赛初赛(普及组P&C)试题及答案●●全部试题答案均要求写在答卷纸上,写在试卷纸上一律无效●●一、单项选择题(共20题,每题1.5分。
每题有且仅有一个正确答案。
)1.微型计算机中,控制器的基本功能是()。
A.控制机器各个部件协调工作B.实现算术运算和逻辑运算C.获取外部信息D.存放程序和数据2.设A=True,B=False,C=True,D=False,以下逻辑运算表达式值为真的是()。
A.(A∧B)∨(C∧D∨﹁A) B.((﹁A∧B)∨C)∧﹁DC.(B∨C∨D)∧D∧A D.A∧(D∨﹁C)∧B3.在下列关于图灵奖的说法中,不正确的是()。
A.图灵奖是美国计算机协会于1966年设立的,专门奖励那些对计算机事业作出重要贡献的个人B.图灵奖有“计算机界诺贝尔奖”之称C.迄今为止,还没有华裔计算机科学家获此殊荣D.图灵奖的名称取自计算机科学的先驱、英国科学家阿兰·图灵4.计算机在工作过程中,若突然停电,()中的信息不会丢失。
A.ROM 和RAM B.CPU C.ROM D.RAM5.完全二叉树共有2*N-1个结点,则它的叶节点数是()。
A.N-1 B.N C.2*N D.2N-16.在以下各项中,( )不是操作系统软件。
A.Solaris B.Linux C.Windows V ista D.Sybase7.设栈S的初始状态为空,元素a,b,c,d,e,f依次入栈S,出栈的序列为b,d,f,e,c,a,则栈S的容量至少应该是()。
A.6 B.5 C.4 D.38.与十进制数28.5625相等的四进制数是()。
A.123.21 B.131.22 C.130.22 D.130.219.设字符串S=”Olympic”,S的非字串的数目是()。
A.28 B.29 C.16 D.1710.Web2.0 是近年来互联网的热门概念之一,其核心思想是互动与分享。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
全国信息学奥林匹克联赛(NOIP2008)复赛
普及组
注意事项:
1、文件名(程序名和输入输出文件名)必须使用小写。
2、C/C++中函数main()的返回值类型必须是int,程序正常结束时的返回值必须是0。
3、全国统一评测时采用的机器配置为:CPU 1.9GHz,内存512M,上述时限以此配置为准。
各省在自测时可根据具体配置调整时限。
1.ISBN号码
(isbn.pas/c/cpp)
【问题描述】
每一本正式出版的图书都有一个ISBN号码与之对应,ISBN码包括9位数字、1位识别码和3位分隔符,其规定格式如“x-xxx-xxxxx-x”,其中符号“-”是分隔符(键盘上的减号),最后一位是识别码,例如0-670-82162-4就是一个标准的ISBN码。
ISBN码的首位数字表示书籍的出版语言,例如0代表英语;第一个分隔符“-”之后的三位数字代表出版社,例如670代表维京出版社;第二个分隔之后的五位数字代表该书在出版社的编号;最后一位为识别码。
识别码的计算方法如下:
首位数字乘以1加上次位数字乘以2......以此类推,用所得的结果mod 11,所得的余数即为识别码,如果余数为10,则识别码为大写字母X。
例如ISBN号码0-670-82162-4中的识别码4是这样得到的:对067082162这9个数字,从左至右,分别乘以1,2, (9)
再求和,即0×1+6×2+……+2×9=158,然后取158 mod 11的结果4作为识别码。
你的任务是编写程序判断输入的ISBN号码中识别码是否正确,如果正确,则仅输出“Right”;如果错误,则输出你认为是正确的ISBN号码。
【输入】
输入文件isbn.in只有一行,是一个字符序列,表示一本书的ISBN号码(保证输入符合ISBN号码的格式要求)。
【输出】
输出文件isbn.out共一行,假如输入的ISBN号码的识别码正确,那么输出“Right”,否则,按照规定的格式,输出正确的ISBN号码(包括分隔符“-”)。
2.排座椅
(seat.pas/c/cpp)
【问题描述】
上课的时候总有一些同学和前后左右的人交头接耳,这是令小学班主任十分头疼的一件事情。
不过,班主任小雪发现了一些有趣的现象,当同学们的座次确定下来之后,只有有限的D对同学上课时会交头接耳。
同学们在教室中坐成了M行N列,坐在第i行第j列
的同学的位置是(i,j),为了方便同学们进出,在教室中设置了K条横向的通道,L条纵向的通道。
于是,聪明的小雪想到了一个办法,或许可以减少上课时学生交头接耳的问题:她打算重新摆放桌椅,改变同学们桌椅间通道的位置,因为如果一条通道隔开了两个会交头接耳的同学,那么他们就不会交头接耳了。
请你帮忙给小雪编写一个程序,给出最好的通道划分方案。
在该方案下,上课时交头接耳的学生对数最少。
【输入】
输入文件seat.in的第一行,有5各用空格隔开的整数,分别是M,N,K,L,D(2<=N,M<=1000,0<=K<M,0<=L<N,D<=2000)。
接下来D行,每行有4个用空格隔开的整数,第i行的4个整数X i,Y i,P i,Q i,表示坐在位置(X i,Y i)与(P i,Q i)的两个同学会交头接耳(输入保证他们前后相邻或者左右相邻)。
输入数据保证最优方案的唯一性。
【输出】
输出文件seat.out共两行。
第一行包含K个整数,a1a2……a K,表示第a1行和a1+1行之间、第a2行和第a2+1行之间、…、第a K行和第a K+1行之间要开辟通道,其中a i< a i+1,每两个整数之间用空格隔开(行尾没有空格)。
第二行包含L个整数,b1b2……b k,表示第b1列和b1+1列之间、第b2列和第b2+1列之间、…、第b L列和第b L+1列之间要开辟通道,其中b i< b i+1,每两个整数之间用空格隔开(行尾没有空格)。
上图中用符号*、※、+ 标出了3对会交头接耳的学生的位置,图中3条粗线的位置表示通道,图示的通道划分方案是唯一的最佳方案。
本题贪心可以得满分的。
当然本题的贪心需要预处理下,开2个一维数组,row[i] 记录如果在第i行加通道,可以分割多少对调皮学生,col[i]记录如果在第j列加通道,可以分割多少对调皮学生,最后贪心法输出分割学生最多的前K行和前L列。
3.传球游戏
(ball.pas/c/cpp)
【问题描述】
上体育课的时候,小蛮的老师经常带着同学们一起做游戏。
这次,老师带着同学们一起做传球游戏。
游戏规则是这样的:n个同学站成一个圆圈,其中的一个同学手里拿着一个球,当老师吹哨子时开始传球,每个同学可以把球传给自己左右的两个同学中的一个(左右任意),当老师再次吹哨子时,传球停止,此时,拿着球没传出去的那个同学就是败者,要给大家表演一个节目。
聪明的小蛮提出一个有趣的问题:有多少种不同的传球方法可以使得从小蛮手里开始传的球,传了m次以后,又回到小蛮手里。
两种传球的方法被视作不同的方法,当且仅当这两种方法中,接到球的同学按接球顺序组成的序列是不同的。
比如有3个同学1号、2号、3号,并假设小蛮为1号,球传了3次回到小蛮手里的方式有1->2->3->1和1->3->2->1,共2种。
【输入】
输入文件ball.in共一行,有两个用空格隔开的整数n,m(3<=n<=30,1<=m<=30)。
【输出】
输出文件ball.out共一行,有一个整数,表示符合题意的方法数。
【限制】
40%的数据满足:3<=n<=30,1<=m<=20
100%的数据满足:3<=n<=30,1<=m<=30
直接dp,似乎说递推更确切点。
f(i,k)表示经过k次传到编号为i的人手中的方案数。
那么可以推出下面的方程:f(i,k)=f(i-1,k-1)+f(i+1,k-1) (i=1或n时,需单独处理)
边界条件:f(1,0)=1;
结果在f(1,m)中
4.立体图
(drawing.pas/c/cpp)
【问题描述】
小渊是个聪明的孩子,他经常会给周围的小朋友们讲些自己认为有趣的内容。
最近,他准备给小朋友们讲解立体图,请你帮他画出立体图。
小渊有一块面积为m*n的矩形区域,上面有m*n个边长为1的格子,每个格子上堆了一些同样大小的积木(积木的长宽高都是1),小渊想请你打印出这些格子的立体图。
我们定义每个积木为如下格式,并且不会做任何翻转旋转,只会严格以这一种形式摆放:
+---+
/ /| 高
+---+ |
| | +
| |/ 宽
+---+
长
每个顶点用1个加号’+’表示,长用3个”-“表示,宽用1个”/”表示,高用两个”|”表示。
字符’+’‘-‘’/’‘|’的ASCII码分别为43,45,47,124。
字符’.’(ASCII码46)需要作为背景输出,即立体图里的空白部分需要用’.’代替。
立体图的画法如下面的规则:若两块积木左右相邻,图示为:
..+---+---+
./ / /|
+---+---+ |
| | | +
| | |/.
+---+---+..
若两块积木上下相邻,图示为:
..+---+
./ /|
+---+ |
| | +
| |/|
+---+ |
| | +
| |/.
+---+..
若两块积木前后相邻,图示为:
….+---+
…/ /|
..+---+ |
./ /| +
+---+ |/.
| | +..
| |/…
+---+….
立体图中,定义位于第(m,1)的格子(即第m行第1列的格子)上面自底向上的第一块
积木(即最下面的一块积木)的左下角顶点为整张图最左下角的点。
【输入】
输入文件drawing.in第一行有用空格隔开的两个整数m和n,表示有m*n个格子(1<=m,n<=50)。
接下来的m行,是一个m*n的矩阵,每行有n个用空格隔开的整数,其中第i行第j 列上的整数表示第i行第j列的格子上摞有多少个积木(1<=每个格子上的积木数<=100)。
【输出】
输出文件drawing.out中包含题目要求的立体图,是一个K行L列的字符矩阵,其中K 和L表示最少需要K行L列才能按规定输出立体图。
Pku原题,编号2330
算不上难题,但是比较麻烦,细心点就ok了。
先计算好画布的大小,再写一个根据左下角坐标绘制一个单位立方体的子程序。
然后遵循下面法则,不停绘制若干个立方体。
(此处能体现出分割程序的伟大)因为要不停的覆盖,所以要遵循“视觉法则”:
1.先绘里层再绘外层
2.先绘底层再绘上层
3.先绘左边再绘右边。