第十二届全国青少年信息学江西赛区复赛试题.docx
《第十二届全国青少年信息学江西赛区复赛试题.docx》由会员分享,可在线阅读,更多相关《第十二届全国青少年信息学江西赛区复赛试题.docx(15页珍藏版)》请在冰豆网上搜索。
第十二届全国青少年信息学江西赛区复赛试题
第十二届全国青少年信息学(计算机)奥林匹克分区联赛
(江西赛区)初级组复赛试题
说明:
复赛共3道题,总分100分。
程序输出时用到的汉字提示可以用拼音来代替
第一题(30分)在一个超市的收银处有10位顾客在排队等着付款,他们的编号依次为1,2,…,10。
由于每个顾客所购的商品不同,因此付款时所需的等待时间也就不一样。
假设这10个每个人单独付款所需的时间依次为
7
4
6
12
8
20
5
13
2
16
请编程找出这10个人排队的一种顺序,使得10个人的平均等待时间最少。
说明:
平均等待时间是把每个人的等待时间相加最后再除以n得到。
假设这n个人是按照编号1至n的自然顺序排列的,则此时的平均等待时间为:
平均等待时间=
输出格式要求:
程序的输出共分两行,其中第一行是编程求到的一种排列顺序,即1到n的一种排列;第二行是这种排列方案下的最少平均等待时间,要求输出的结果精确到小数点后两位。
第二题(30分)利用循环结构编程打印如下的图案。
A
ABC
ABCDE
ABCDEFG
ABCDEFGHI
ABCDEFG
ABCDE
ABC
A
第三题(40分)用高精度计算S=1!
+2!
+3!
+…+n!
的准确值,其中n〈50。
说明:
上面求和公式当中的“!
”表示阶乘,它表示连乘,例如:
10!
=10*9*8*7*6*5*4*3*2*1
编程要求:
从键盘上输入一个小于50的正整数n,要求能够输出结果S的准确值。
例如:
输入:
6
输出:
S=873
收藏分享评分
第十四届全国青少年信息学(计算机)奥林匹克联赛(江西赛区)初级组复赛试题
2009-6-1713:
52
提问者:
曾敏天才|悬赏分:
50|浏览次数:
910次
2009-6-2019:
56
最佳答案
1.ISBN号码
描述Description
每一本正式出版的图书都有一个ISBN号码与之对应,ISBN码包括9位数字、1位识别码和3位分隔符,其规定格式如“x-xxx-xxxxx-x”,其中符号“-”就是分隔符(键盘上的减号),最后一位是识别码,例如0-670-82162-4就是一个标准的ISBN码。
ISBN码的首位数字表示书籍的出版语言,例如0代表英语;第一个分隔符“-”之后的三位数字代表出版社,例如670代表维京出版社;第二个分隔符后的五位数字代表该书在该出版社的编号;最后一位为识别码。
识别码的计算方法如下:
首位数字乘以1加上次位数字乘以2……以此类推,用所得的结果mod11,所得的余数即为识别码,如果余数为10,则识别码为大写字母X。
例如ISBN号码0-670-82162-4中的识别码4是这样得到的:
对067082162这9个数字,从左至右,分别乘以1,2,...,9,再求和,即0×1+6×2+……+2×9=158,然后取158mod11的结果4作为识别码。
你的任务是编写程序判断输入的ISBN号码中识别码是否正确,如果正确,则仅输出“Right”;如果错误,则输出你认为是正确的ISBN号码。
输入格式InputFormat
输入文件isbn.in只有一行,是一个字符序列,表示一本书的ISBN号码(保证输入符合ISBN号码的格式要求)。
输出格式OutputFormat
输出文件isbn.out共一行,假如输入的ISBN号码的识别码正确,那么输出“Right”,否则,按照规定的格式,输出正确的ISBN号码(包括分隔符“-”)。
样例输入SampleInput
【样例1】
0-670-82162-4
【样例2】
0-670-82162-0
样例输出SampleOutput
【样例1】
Right
【样例2】
0-670-82162-4
2.传球游戏
描述Description
上体育课的时候,小蛮的老师经常带着同学们一起做游戏。
这次,老师带着同学们一起做传球游戏。
游戏规则是这样的:
n个同学站成一个圆圈,其中的一个同学手里拿着一个球,当老师吹哨子时开始传球,每个同学可以把球传给自己左右的两个同学中的一个(左右任意),当老师再次吹哨子时,传球停止,此时,拿着球没传出去的那个同学就是败者,要给大家表演一个节目。
聪明的小蛮提出了一个有趣的问题:
有多少种不同的传球方法可以使得从小蛮手里开始传的球,传了m次以后,又回到小蛮手里。
两种传球方法被视作不同的方法,当且仅当这两种方法中,接到球的同学按接球顺序组成的序列是不同的。
比如有三个同学1号、2号、3号,并假设小蛮为1号,球传了三次回到小蛮手里的方式有1->2->3->1和1->3->2->1,共2种。
输入格式InputFormat
输入共一行,有两个用空格隔开的整数n,m(3<=n<=30,1<=m<=30)。
输出格式OutputFormat
输出共一行,有一个整数,标示符合题意的方法数。
样例输入SampleInput
33
样例输出SampleOutput
2
3.立体图描述Description
小渊是个聪明的孩子,他经常会给周围的小朋友们讲些自己认为有趣的内容。
最近,他准备给小朋友讲解立体图,请你帮他画出立体图。
小渊有一块面积为m*n的矩形区域,上面有m*n个边长为1的格子,每个格子上堆了一些同样大小的积木(积木的长宽高都是1),小渊想请你打印出这些格子的立体图。
我们定义每个积木为如下格式,并且不会做任何翻转旋转,只会严格以这样的一种形式摆放:
+---+
//|
+---+|
||+
||/
+---+
每个顶点用1个加号‘+’表示,长用3个‘-’表示,宽用1个‘/’表示,高用两个‘|’表示。
字符‘+’,‘-’,‘/’,‘|’的ASCII码分别为43,45,47,124。
字符‘.’(ASCII码46)需要作为背景输出,即立体图里的空白部分需要用‘.’来代替。
立体图的画法如下面的规则:
若两块积木左右相邻,图示为:
..+---+---+
.///|
+---+---+|
|||+
|||/.
+---+---+..
若两块积木上下相邻,图示为:
..+---+
.//|
+---+|
||+
||/|
+---+|
||+
||/.
+---+..
若两块积木前后相邻,图示为:
....+---+
...//|
..+---+|
.//|+
+---+|/.
||+..
||/...
+---+....
立体图中,定义位于第(m,1)的格子(即第m行第1列的格子)上面自底向上的第一块积木(即最下面的一块积木)的左下角顶点为整张图最左下角的点。
输入格式InputFormat
输入文件drawing.in第一行有用空格隔开的2个整数m和n,表示有m*n个格子(1<=m,n<=50)。
接下来的m行,是一个m*n的矩阵,每行有n个用空格隔开的整数,其中第i行第j列上的整数表示第i行第j列的格子上摞有多少个积木(1<=每个格子上的积木数<=100)。
输出格式OutputFormat
输出文件drawing.out中包含题目要求的立体图,是一个K行L列的字符矩阵,其中K和L表示最少需要K行L列才能按规定输出立体图。
样例输入SampleInput
34
2212
2211
3212
样例输出SampleOutput
......+---+---+...+---+
..+---+//|..//|
.//|-+---+|.+---+|
+---+|//|+-||+
||+---+|/+---+|/|
||//|+//|-+|
+---+---+|/+---+|/|+
|||+-||+|/.
|||/||-|+..
+---+---+---+---+|/...
|||||+....
|||||/.....
+---+---+---+---+......
4.排座椅
描述Description
【问题描述】
上课的时候总有一些同学和前后左右的人交头接耳,这是令小学班主任十分头疼的一件事情。
不过,班主任小雪发现了一些有趣的现象,当同学们的座次确定下来之后,只有有限的D对同学上课时会交头接耳。
同学们在教室中坐成了M行N列,坐在第i行第j列的同学的位置是(i,j),为了方便同学们进出,在教室中设置了K条横向的通道,L条纵向的通道。
于是,聪明的小雪想到了一个办法,或许可以减少上课时学生交头接耳的问题:
她打算重新摆放桌椅,改变同学们桌椅间通道的位置,因为如果一条通道隔开了两个会交头接耳的同学,那么他们就不会交头接耳了。
请你帮忙给小雪编写一个程序,给出最好的通道划分方案。
在该方案下,上课时交头接耳的学生对数最少。
输入格式InputFormat
【输入】
输入文件seat.in的第一行,有5各用空格隔开的整数,分别是M,N,K,L,D(2<=N,M<=1000,0<=K接下来D行,每行有4个用空格隔开的整数,第i行的4个整数Xi,Yi,Pi,Qi,表示坐在位置(Xi,Yi)与(Pi,Qi)的两个同学会交头接耳(输入保证他们前后相邻或者左右相邻)。
输入数据保证最优方案的唯一性。
输出格式OutputFormat
【输出】
输出文件seat.out共两行。
第一行包含K个整数,a1a2……aK,表示第a1行和a1+1行之间、第a2行和第a2+1行之间、…、第aK行和第aK+1行之间要开辟通道,其中ai第二行包含L个整数,b1b2……bk,表示第b1列和b1+1列之间、第b2列和第b2+1列之间、…、第bL列和第bL+1列之间要开辟通道,其中bi样例输入SampleInput
【输入样例】
45123
4243
2333
2524
样例输出SampleOutput
2
24
附标程:
1.ISBN号码
programasd;
vars,s1:
string;
i,j,k,q,b,x,n,z,u:
longint;
begin
readln(s);s1:
=s;q:
=length(s1);
delete(s1,q,1);
whilepos('-',s)<>0do
delete(s,pos('-',s),1);
k:
=length(s);
fori:
=1tok-1do
begin
val(s[i],j);
x:
=x+j*i;
end;
val(s[k],z,u);
x:
=xmod11;
ifu=0then
ifz=xthen
writeln('Right')
else
casexof
1..9:
writeln(s1,x);
10:
writeln(s1,'X');
end;
ifu<>0then
ifx=10thenwriteln('Right')
elsewriteln(s1,x);
end.
2.传球游戏
programp1485;
varxx:
array[0..1000,0..1000]oflongint;
i,j,k,l,n,m:
longint;
begin
readln(n,m);
fori:
=1tomdo
forj:
=1tondo
xx[i,j]:
=0;
xx[0,1]:
=1;xx[1,n]:
=1;xx[1,2]:
=1;
fori:
=1tomdo
begin
xx[i,1]:
=xx[i-1,n]+xx[i-1,2];
forj:
=2ton-1do
xx[i,j]:
=xx[i-1,j-1]+xx[i-1,j+1];
xx[i,n]:
=xx[i-1,1]+xx[i-1,n-1];
end;
writeln(xx[m,1]);
end.
3.立体图
programo1;
varminh,minl,max,k,n,m,i,j,h,l,maxh,maxl:
integer;
a:
array[1..50,1..50]ofinteger;
p:
array[-304..304,-304..304]ofchar;
begin
readln(n,m);
fillchar(p,sizeof(p),'.');
fori:
=1tondo
forj:
=1tomdo
beginread(a[i,j]);if(i=1)and(a[i,j]>max)thenmax:
=a[i,j];end;
max:
=max*3+3;
minh:
=1;minl:
=1;
fori:
=1tondo
forj:
=1tomdo
begin
h:
=max+(i-1)*2;l:
=4*j+1+(n-i)*2;
ifh>maxhthenmaxh:
=h;
ifl>maxlthenmaxl:
=l;
ifl-4=l-4;
fork:
=1toa[i,j]do
begin
ifh-5=h-5;
p[h,l]:
='+';
p[h,l-1]:
='-';
p[h,l-2]:
='-';
p[h,l-3]:
='-';
p[h,l-4]:
='+';
p[h-1,l]:
='|';
p[h-1,l-1]:
='';
p[h-1,l-2]:
='';
p[h-1,l-3]:
='';
p[h-1,l-4]:
='|';
p[h-2,l]:
='|';
p[h-2,l-1]:
='';
p[h-2,l-2]:
='';
p[h-2,l-3]:
='';
p[h-2,l-4]:
='|';
p[h-3,l]:
='+';
p[h-3,l-1]:
='-';
p[h-3,l-2]:
='-';
p[h-3,l-3]:
='-';
p[h-3,l-4]:
='+';
p[h-1,l+1]:
='/';
p[h-2,l+1]:
='';
p[h-2,l+2]:
='+';
p[h-3,l+1]:
='';
p[h-3,l+2]:
='|';
p[h-4,l+1]:
='/';
p[h-4,l+2]:
='|';
p[h-5,l+2]:
='+';
p[h-5,l+1]:
='-';
p[h-4,l-3]:
='/';
p[h-4,l-2]:
='';
p[h-4,l-1]:
='';
p[h-4,l]:
='';
p[h-5,l-2]:
='+';
p[h-5,l-1]:
='-';
p[h-5,l]:
='-';
h:
=h-3;
end;
end;
fori:
=minhtomaxhdo
begin
forj:
=minltomaxl+2do
write(p[i,j]);
writeln;
end;
end.
4.排座椅
programp1498;{1,数组压缩,去0(*)2,基数排序(**)}
typende=record
name:
longint;
ren:
longint;
end;
node=array[1..1000]ofnde;
vara,b,x,y,p,q:
array[1..2000]oflongint;
c,d:
node;f:
array[1..2000]ofboolean;
i,j,k,l,m,n,o,q1,q2:
longint;
proceduretry(m,q1,k:
longint;c:
node);
vari,j,l:
longint;t:
nde;
begin
fori:
=1toq1-1do
forj:
=I+1toq1do
if(c[i].renbegin
t:
=c[i];c[i]:
=c[j];c[j]:
=t;
end;
fori:
=1tokdo{**}
f[c[i].name]:
=true;
fori:
=1tomdo
iff[i]=truethen
write(i,'');writeln;
end;
begin
readln(m,n,k,l,o);
fori:
=1toodo
begin
readln(x[i],y[i],p[i],q[i]);
ifx[i]=p[i]then
ify[i]inc(b[q[i]]);
ify[i]=q[i]then
ifx[i]
inc(a[p[i]]);
end;
fori:
=1to1000do
begin
ifa[i]>0thenbegin{*}
inc(q1);c[q1].name:
=i;
c[q1].ren:
=a[i];
end;
ifb[i]>0thenbegin
inc(q2);d[q2].name:
=i;
d[q2].ren:
=b[i];
end;
end;
try(m,q1,k,c);
fillchar(f,sizeof(f),false);
try(n,q2,l,d);
end.