初赛试题及答案Word文件下载.docx
《初赛试题及答案Word文件下载.docx》由会员分享,可在线阅读,更多相关《初赛试题及答案Word文件下载.docx(17页珍藏版)》请在冰豆网上搜索。
14.常见的邮件传输服务器使用()协议接收邮件。
A.HTTPB.SMTPC.TCPD.FTPE.POP3
15.下列浏览器中,由微软公司开发的浏览器是()。
A.InternetExploreB.NetscapeC.OperaD.FirefoxE.Mozilla
16.一位艺术史学家有20000幅真彩色图像,每幅图像约占3M空间。
如果将这些图像以位
图形式保存在CD光盘上(一张CD光盘的容量按600M计算),大约需要()张CD
光盘。
A.1B.10C.100D.1000E.10000
17.设A=true,B=false,C=false,D=true,以下逻辑运算表达式值为真的是()。
A.(AB∧)∨(CD∧)B.((AB∧)C∨)D∧C.A∧((BC∨)D∧)
D.(A∧(BC∨))D∨E.(AB∨)∧(CD∧)
18.(3725)8+(B)16的运算结果是()。
A.(3736)8B.(2016)10C.(1111110000)2D.(3006)10E.(7B0)16
19.二叉树T的宽度优先遍历序列为ABCDEFGHI,已知A是C的父结点,D是G的
父结点,F是I的父结点,树中所有结点的最大深度为3(根结点深度设为0),可知F
的父结点是()。
A.无法确定B.BC.CD.DE.E
20.设栈S的初始状态为空,元素a,b,c,d,e,f,g依次入栈,以下出栈序列不可能出现的是
()。
A.a,b,c,e,d,f,gB.b,c,a,f,e,g,dC.a,e,d,c,b,f,g
D.d,c,f,e,b,a,gE.g,e,f,d,c,b,a
二.问题求解(请在空格处填上答案,每空5分,共10分)
1.将数组{32,74,25,53,28,43,86,47}中的元素按从小到大的顺序排列,每次可以交换任
意两个元素,最少需要交换次。
2.有3个课外小组:
物理组,化学组和生物组。
今有张、王、李、赵、陈5名同学,已知
张、王为物理组成员,张、李、赵为化学组成员,李、赵、陈为生物组成员。
如果要在
3个小组中分别选出3位组长,一位同学最多只能担任一个小组的组长,共有种
选择方案。
三.阅读程序(共4题,每题8分,共计32分)
==================PASCAL语言==================
1.var
a,b:
integer;
begin
read(a);
b:
=(a*(a*a))+1;
ifbmod3=0thenb:
=bdiv3;
ifbmod5=0thenb:
=bdiv5;
ifbmod7=0thenb:
=bdiv7;
ifbmod9=0thenb:
=bdiv9;
ifbmod11=0thenb:
=bdiv11;
ifbmod13=0thenb:
=bdiv13;
ifbmod15=0thenb:
=bdiv15;
writeln((100*a-b)div2);
end.
输入:
10
输出:
499
2.var
str:
string;
i:
='
Today-is-terrible!
'
;
fori:
=7to11do
ifstr='
-'
thenstr[i-1]:
x'
=13downto1do
t'
thenstr[i+1]:
e'
writeln(str);
Today-ix-terrible!
3.var
a,b,c,p,q:
r:
array[0..2]ofinteger;
read(a,b,c);
p:
=adivbdivc;
q:
=b-c+a+p;
r[0]:
=a*pdivq*q;
r[1]:
=r[0]*(r[0]-300);
if(3*q-pmod3<
=r[0])and(r[2]=r[2])then
=r[r[0]divpmod2]
elser[1]:
=qmodp;
writeln(r[0]-r[1]);
10073
-7452
4.var
len,i,j:
nchr:
array[0..25]ofinteger;
mmin:
char;
z'
readln(str);
len:
=length(str);
=len;
whilei>
=2dobegin
ifstr[i-1]<
strthenbreak;
dec(i);
end;
ifi=1thenbegin
writeln('
Noresult!
);
exit;
forj:
=1toi-2dowrite(str[j]);
fillchar(nchr,sizeof(nchr),0);
=itolendobegin
if(str[j]>
str[i-1])and(str[j]<
mmin)then
=str[j];
inc(nchr[ord(str[j])-ord('
a'
)]);
dec(nchr[ord(mmin)-ord('
inc(nchr[ord(str[i-1])-ord('
write(mmin);
=0to25do
=1tonchrdo
write(chr(i+ord('
)));
writeln;
zzyzcccbbbaaa
zzzaaabbbcccy
==================C语言==================
1.#include<
stdio.h>
intmain(){
inta,b;
scanf(“%d”,&
a);
b=(a*(a*a))+1;
if(b%3==0)b=b/3;
if(b%5==0)b=b/5;
if(b%7==0)b=b/7;
if(b%9==0)b=b/9;
if(b%11==0)b=b/11;
if(b%13==0)b=b/13;
if(b%15==0)b=b/15;
printf(“%d\n”,(100*a–b)/2);
return0;
}
2.#include<
charstr[20]=“Today-is-terrible!
”;
inti;
for(i=6;
i<
=10;
i++)
if(str==‘-‘)str[i–1]=‘x‘;
for(i=12;
i>
=0;
i--)
if(str==‘t’)str[i+1]=‘e’;
printf(“%s\n”,str);
3.#include<
inta,b,c,p,q,r[3];
scanf(“%d%d%d”,&
a,&
b,&
c);
p=a/b/c;
q=b–c+a+p;
r[0]=a*p/q*q;
r[1]=r[0]*(r[0]–300);
if(3*q–p%3<
=r[0]&
&
r[2]==r[2])
r[1]=r[r[0]/p%2];
else
r[1]=q%p;
printf(“%d\n”,r[0]–r[1]);
4.#include<
#include<
string.h>
intmain(){
charstr[60];
intlen,i,j,chr[26];
charmmin='
scanf("
%s"
str);
len=strlen(str);
for(i=len-1;
=1;
if(str[i-1]<
str)break;
if(i==0){
printf("
\n"
return0;
for(j=0;
j<
i-1;
j++)putchar(str[j]);
memset(chr,0,sizeof(chr));
for(j=i;
len;
j++){
str[i-1]&
str[j]<
mmin)
mmin=str[j];
chr[str[j]-'
]++;
chr[mmin-'
]--;
chr[str[i-1]-'
putchar(mmin);
for(i=0;
26;
for(j=0;
chr;
j++)
putchar(i+'
putchar('
\n'
四.完善程序(前4空,每空2分,后5空,每空4分,共28分)
1.判断质数
题目描述:
给出一个正整数,判断这个数是否是质数。
输入:
一个正整数n(1≤n≤10000)。
输出:
如果n是质数,输出”YES”;
否则,输出”NO”。
输入样例:
输出样例:
NO
程序:
var
①n,i:
read(n);
ifn=2thenwriteln(②yes)
elseif(③n=1)or(nmod2=0)thenwriteln('
NO'
)
elsebegin
=3;
whilei*i<
=ndobegin
if④nmodi=0thenbegin
=i+2;
YES'
2.木材加工
木材厂有一些原木,现在想把这些木头切割成一些长度相同的小段木头(木头有可能有剩余),需要得到的小段的数目是给定的。
当然,我们希望得到的小段越长越好,你的任务是计算能够得到的小段木头的最大长度。
木头长度的单位cm。
原木的长度都是正整数,我们要求切割得到的小段木头的长度也是正整数。
第一行是两个正整数N和K(1≤N≤10000,1≤K≤10000),N是原木的数目,K是需要得到的小段的数目。
接下来的N行,每行有一个1到10000之间的正整数,表示一根原木的长度。
输出能够切割得到的小段的最大长度。
如果连1cm长的小段都切不出来,输出”0”。
37
232
124
456
114
n,k:
len:
array[1..10000]ofinteger;
i,left,right,mid:
functionisok(t:
integer):
boolean;
num,i:
num:
=1tondobegin
ifnum>
=kthenbreak;
num:
=①num+len[i]divt;
if②num>
=knumthenisok:
=true
elseisok:
=false;
readln(n,k);
right:
readln(len);
ifright<
lenthenright:
inc(right);
③left:
=0;
while④left+1<
rightdobegin
mid:
=(left+right)div2;
if⑤notisok(mid)thenright:
=mid
elseleft:
=mid;
writeln(left);
#include<
int①;
%d"
&
n);
if(n==2)puts(②);
elseif(③||n%2==0)puts("
NO"
else{
i=3;
while(i*i<
=n){
if(④){
puts("
i=i+2;
YES"
木材厂有一些原木,现在想把这些木头切割成一些长度相同的小段木头,需要得到的小
段的数目是给定的。
当然,我们希望得到的小段越长越好,你的任务是计算能够得到的小段
木头的最大长度。
木头长度的单位是cm。
原木的长度都是正整数,我们要求切割得到的小段木头的长度
也是正整数。
第一行是两个正整数N和K(1≤N≤10000,1≤K≤10000),N是原木的数目,
K是需要得到的小段的数目。
intn,k,len[10000];
intisok(intt){
intnum=0,i;
for(i=0;
n;
i++){
if(num>
=k)break;
num=①;
if(②)return1;
elsereturn0;
inti,left,right,mid;
%d%d"
n,&
k);
right=0;
(len));
if(right<
len)right=len;
right++;
③;
while(④<
right){
mid=(left+right)/2;
if(⑤)right=mid;
elseleft=mid;
printf("
%d\n"
left);
第十一届全国青少年信息学奥林匹克联赛初赛试题普及组(P&
C)参考答案
一.选择一个正确答案代码(A/B/C/D/E),填入每题的括号内(每题1.5分,多选无分,共30分)
题号
1
2
3
4
5
6
7
8
9
选择
B
A
D
E
D
E
11
12
13
14
15
16
17
18
19
20
C
A
C
B
二.问题解答(每题5分,共10分)
1.答:
5
2.答:
11
三.阅读程序,并写出程序的正确运行结果:
(每题8分,共32分)
(1)程序的运行结果是:
(2)程序的运行结果是:
Today-ix-terrible!
(3)程序的运行结果是:
(4)程序的运行结果是:
四.根据题意,将程序补充完整(前4空,每空2分,后5空,每空4分,共28分)
pascal语言
=================
1.
①
n,i
(或者i,n)
②
③
n=1
(或者n–1=0)
④
nmodi=0
2.
num+len[i]divt
num>
=k
left:
=0
④
left+1
⑤
notisok(mid)(或者isok(mid)=false)
C语言
n,i(或者i,n)
n==1(或者n–1==0)
n%i==0
(或者!
n%i)