#YGAP16. 市赛模拟题(二)
市赛模拟题(二)
选择题
1.计算机的运算速度取决于给定的时间内,它的处理器所能处理的数据量。处理器一次能处理的数据量叫字长。已知 64 位奔腾处理器一次能处理 64 个信息,相当于()字节。{{ select(1) }}
- 8个
- 1个
- 16个
- 2个
2.用某种排序方法对数列{25,84,21,47,15,27}进行排序,数列变化如下:
{15,84,21,47,25,27}
{15,21,84,47,25,27}
{15,21,25,47,84,27}
那么排序方法是(){{ select(2) }}
- 冒泡
- 选择
- 插入
- 快速
3.小明家突然断电了,以下仍能保存数据的是:( ){{ select(3) }}
- rom
- ram
- 高速缓存
- 寄存器
4.现有一张分辨率2048×1024 像素的 32 位真彩色图像。请问要存储这张图像,需要多大的存储空间?{{ select(4) }}
- 16MB
- 4MB
- 8MB
- 2MB
5.计算机为了要在网络中和其他计算机交流数据,什么东西是必不可少的?{{ select(5) }}
- 网线
- 路由器
- 网络协议
- 电子邮箱
6.二进制数 1011 转换成十进制数是( )。{{ select(6) }}
- 11
- 10
- 13
- 12
7.运行以下代码片段的行为是()
int x = 101;
int y = 201;
int *p = &x;
int *q = &y;
p=q;
{{ select(7) }}
- 将 x 的值赋为 201
- 将 y 的值赋为 101
- 将 q 指向 x 的地址
- 将 p 指向 y 的地址
8.由 1,1,2,2,3 这五个数字组成不同的三位数有()种{{ select(8) }}
- 18
- 15
- 12
- 24
9.以下和计算机领域最密切相关的奖项是( )。{{ select(9) }}
- 菲尔兹奖
- 图灵奖
- 诺贝尔奖
- 普利策奖
10.目前主流计算机储存数据采用( )进行储存。{{ select(10) }}
- 二进制
- 十进制
- 八进制
- 十六进制
11.定义 n!=1*2*3*....*n,则 100!的末尾 0 的个数为{{ select(11) }}
- 23
- 24
- 25
- 26
12.已知定义 int a[][3] = {1, 2, 3, 4, 5, 6, 7, 8}; 则以下哪个选项结果为10。{{ select(12) }}
- a[0][1] + a[2][1]
- a[1][0] + a[2][1]
- a[1][1] + a[2][1]
- a[1][1] + a[2][2]
13.已经 f[i]=f[i-1]+f[i-2]*2(i>=2),f[0]=f[1]=1,则 f[6]=( ){{ select(13) }}
- 21
- 43
- 85
- 41
14.某个非负整数的二进制、十进制、十六进制的表示均一致,则这个数是(){{ select(14) }}
- 1
- 0
- 无数多个
- 1和0
15.电线上停着两种鸟(A、B),可以看出两只相邻的鸟将电线分为了一个线段,这些线段可分为两类:一类是两端的小鸟相同;另一类是两端的小鸟不相同。已知:电线上两个顶点处正好停着相同的小鸟。则两端为不同小鸟的线段数目一定是{{ select(15) }}
- 奇数
- 偶数
- 可奇可偶
- 数目不定
程序阅读题
程序A:
char st[100];
int main(){
scanf("%s",st);
int n =strlen(st);
for(int i=1;i<=n;++i){//第17题
char c=st[i-1];//第18题
if(c>='a' && c<='z') st[i-1]=c-'a'+'A';
}
printf("%s",st);
return 0;
16.输入的字符串只能由小写字母或大写字母组成, 否则程序运行时会发生错误{{ select(16) }}
- 正确
- 错误
17.若将第 5 行的“i=1”改为“i=0”,程序运行时会发生错误。{{ select(17) }}
- 正确
- 错误
18.若将第 6 行的“st[i-1]”改为“st[i]”,程序运行结果不会改变。{{ select(18) }}
- 正确
- 错误
19.若输入的字符串为“abc123ABC”,那么输入的字符串跟输出的字符串相比,有()个字符不同。{{ select(19) }}
- 3
- 6
- 9
- 0
20.若输入的字符串为( ),输出的字符串和输入的字符串相同{{ select(20) }}
- abc123
- aBc123
- ABc123
- ABC123
程序B
#include<bits/stdc++.h>
using namespace std;
bool vis[200010];
int ans;
void zs(int n){
for(int i=2;i<=n;i++){
if(vis[i]==0){
ans++;
for(int j=2;i*j<=n;j++){//第24题
vis[i*j]=1;
}
}
}
}
int main(){
int n;
cin>>n;
zs(n);
cout<<ans<<endl;
return 0;
}
21.若输入的 n 的值为 10,则输出结果为 4。{{ select(21) }}
- 正确
- 错误
22.若输入的 n 的值为 20,则输出结果为 7。{{ select(22) }}
- 正确
- 错误
23.若 vis[n]的值为 0,则说明 n 是质数。{{ select(23) }}
- 正确
- 错误
24.为了提升程序效率,可以将第 9 行的“int j=2”改为“int j=i”{{ select(24) }}
- 正确
- 错误
25.对该程序的复杂度估算最准确的是{{ select(25) }}
程序C
#include<bits/stdc++.h>
using namespace std;
long long n,a[50005],ks,s=1,ans;//第26题
int main(){
cin>>n;
for(int i=1;i<=n;i++) cin>>a[i];
sort(a+1,a+n+1);
for(int i=1;i<=n;i++){
if(a[i]==a[i-1]) s++;
else{
ans=max(ans,s);//第28题
s=1;
}
}
cout<<ans;
return 0;
}
假设输入的正整数 n 的值不超过 50000, 0 <= a[i]<= 1000000000,请回答以下问题:
26.根据数据范围,第 3 行的 long long 可以改为 int{{ select(26) }}
- 正确
- 错误
27.在同一组数据下,第 12 行的 a[i]==a[i-1]可以改为 a[i]==a[i+1],结果不变{{ select(27) }}
- 正确
- 错误
28.第 11 行与第 12 行互换,会影响输出结果{{ select(28) }}
- 正确
- 错误
29.最后输出的 ans 值有可能为 0{{ select(29) }}
- 正确
- 错误
30.若输入的 n 为 10,10 个数分别为 8 5 7 4 0 7 1 3 0 9,结果为{{ select(30) }}
- 0
- 1
- 2
- 3
程序D
#include<bits/stdc++.h>
using namespace std;
int n;//第31题
int fac(int n){
if(n==1||n==0) return 1;
return fac(n-1)+fac(n-2);
}
int main(){
cin>>n;//第32题
cout<<fac(n);
return 0;
}
31.第 3 行定义的变量 n 与第 4 行定义的变量 n 意义相同。{{ select(31) }}
- 正确
- 错误
32.把第 3 行定义变量的语句移动到第 9 行,不影响程序执行。{{ select(32) }}
- 正确
- 错误
33.不考虑其他因素,把第 4 行的 int fac 改成 long long fac,此程序就能正确算出 n 为50 时的结果{{ select(33) }}
- 正确
- 错误
34.此程序的时间复杂度是{{ select(34) }}
35.若输入 10,输出结果是{{ select(35) }}
- 1
- 55
- 89
- 144
完善程序题
程序A (回文数)回文数指的是一个数字,从左到右读和从右到左读都一样。例如,1221 和 1234321是回文数,1234 不是回文数。现有 n 个正整数 ai(i=0,1,2,3,.....n-1),请找出其中最大的回文数
#include<bits/stdc++.h>
using namespace std;
long long n,s,a[10005],s1,x,ans;
int main(){
cin>>n;
for(int i=1;i<=n;i++){
scanf("第36题",&x);
s=x;
第37题;
while(s>0){
s1=第38题;
第39题;
}
if(s1==x) ans=第40题;
}
cout<<ans;
return 0;
}
36ti{{ select(36) }}
- %lld
- %d
- %c
- %f
37ti{{ select(37) }}
- x=0
- s1=0
- s=0
- ans=0
38ti{{ select(38) }}
- s1*10
- s%10
- s1*10+s%10
- s1*10+s/10
39ti{{ select(39) }}
- x/=10
- s/=10
- x%=10
- s%=10
40ti{{ select(40) }}
- s
- x
- min(x,ans)
- max(x,ans)
程序B (幸运数字)假设幸运数字是 7。现在小明和小华手上各有 n 个数,他们想每人从中选择一个数,然后把两个数相加,所得的和如果能被 7 整除,则小明和小华觉得自己是幸运的。求小明和小华觉得自己是幸运的选择方案数
#include<bits/stdc++.h>
using namespace std;
int n,t,a[10],b[10];
int main(){
cin>>n;
int ans=第41题;
for(int i=1;i<=n;i++){
scanf("%d",&t);
第42题;
}
for(int i=1;i<=n;i++){
scanf("%d",&t);
b[t%7]++;
}
for(int 第43题){
ans+=a[i]*第44题;
}
ans+=第45题;
cout<<ans;
return 0;
}
41ti{{ select(41) }}
- 1
- 0
- n
- n+1
42ti{{ select(42) }}
- a[i]=t
- a[t]++
- a[t%7]++
- a[t%10]++
43ti{{ select(43) }}
- i=0;i<=6;i++
- i=1;i<=6;i++
- i=0;i<=n;i++
- i=1;i<=n;i++
44ti{{ select(44) }}
- b[0]
- b[i]
- b[n-i]
- b[7-i]
45ti{{ select(45) }}
- a[0]*b[0]
- a[0]+b[0]
- a[7]*b[7]
- a[n]*b[n]
程序C
(质因数)从小到大打印正整数 n 以内的所有质因数(既是质数,又是 n 的因数的数)
#include<bits/stdc++.h>
using namespace std;
int fac[10000+5],n,t,i;
int main(){
cin>>n;
for(int i=2;i<=n;i++){
if(第46题){
bool isprime=true;
for(int j=0;j<t;j++){
if(第47题){
isprime=第48题;
break;
}
}
if(第49题) fac[t++]=i;
}
}
for(int k=0;k<t;k++){
cout<<第50题<<" ";
}
return 0;
}
46ti{{ select(46) }}
- n%i==0
- n%i==1
- n%(i-1)==0
- n%(i-1)==1
47ti{{ select(47) }}
- i%fac[j]==0
- fac[j]%i==0
- i%fac[j]!=0
- fac[j]%i!=0
48ti{{ select(48) }}
- false
- true
- (i<=fac[j])
- (i==fac[j])
49ti{{ select(49) }}
- n%i==0
- i<=t
- isprime
- !isprime
50ti{{ select(50) }}
- n/fac[k]
- fac[k]
- fac[k]-1
- n/(fac[k]-1)
程序D (风景点)给出 N 行 M 列的二维格子, 每个格子要么是‘ #’ ,要么是‘ .’ 。 一个格子是“ 风景点” ,它同时满足如下两个条件:
1、 该格子是‘ .’;
2、 该格子的上、 下、左、 右, 四个方向整条线全部都是‘ .’(该点处于边缘的话可以忽略该点没有的方向,如点在左边缘只需考虑上、下、右三个方向)。
你的任务是统计总共有多少个“ 风景点” 。
#include<bits/stdc++.h>
using namespace std;
第51题 a[1001][1001];
int n,m,ans;
int main(){
cin>>n>>m;
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
cin>>a[i][j];
}
}
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
bool book=true;
if(第52题){
for(int k=1;k<=第53题;k++){
if(第54题!='.') book=false;
}
for(int k=1;k<=n;k++){
if(a[k][j]!='.') book=false;
}
if(第55题) ans++;
}
}
}
cout<<ans;
return 0;
}
51ti{{ select(51) }}
- int
- long long
- char
- string
52ti{{ select(52) }}
- a[i][j]=='.'
- a[i][j]=='#'
- a[i][j]==1
- a[i][j]==0
53ti{{ select(53) }}
- i
- j
- n
- m
54ti{{ select(54) }}
- a[i][k]
- a[j][k]
- a[k][i]
- a[k][j]
55ti{{ select(55) }}
- a[i][j]=='.'
- a[i][j]=='#'
- book
- !book
程序E
(连续区间)现有 n 个整数,每个整数用 ai 表示(1<=ai<=n)。现希望找出连续的一段区间,要求区间内不能出现重复数字。求符合要求的区间的最大长度。
#include<bits/stdc++.h>
using namespace std;
int n,a[100001],m=-1,b[1000001];
int main(){
cin>>n;
for(int i=1;i<=n;i++) scanf("%d",&a[i]);
for(int 第56题;R<=n;第57题){
第58题;
while(第59题){
b[a[L]]--;
L++;
}
m=max(m,第60题);
}
return 0;
}
56ti{{ select(56) }}
- L=0,R=0
- L=0,R=1
- L=1,R=0
- L=1,R=1
57ti{{ select(57) }}
- L++
- R++
- L++,R++
- 不填
58ti{{ select(58) }}
- b[a[R]]++
- a[R]++
- b[a[L]]++
- a[L]++
59ti{{ select(59) }}
- a[R]>1
- b[a[R]]>1
- a[L]>1
- b[a[L]]>1
60ti{{ select(60) }}
- b[a[R]]
- b[a[L]]
- R-L
- R-L+1
程序F (看电视)给出 n 个节目的时间表,每个节目用两个整数 si 和 ei 表示第 i 个节目的开始和 结束时间。节目间存在时间重叠的情况,问最多可以完整看完多少个节目?
#include<bits/stdc++.h>
using namespace std;
struct f{
int s,e;
}a[10000+5];
bool cmp(f a,f b){
if(a.e!=b.e) return 第61题;
return a.s>b.s;
}
int n,ans,k;
int main(){
cin>>n;
for(int i=1;i<=n;i++) cin>>a[i].s>>a[i].e;
sort(a+1,a+n+1,cmp);
k=第62题;
ans=1;
for(int i=第63题;i<=n;i++){
if(第64题){
k=a[i].e;
第65题;
}
}
cout<<ans;
return 0;
}
61ti{{ select(61) }}
- true
- false
- a.e<b.e
- a.s<b.s
62ti{{ select(62) }}
- a[1].e
- a[1].s
- 0
- 1
63ti{{ select(63) }}
- 1
- 2
- k
- k+1
64ti{{ select(64) }}
- a[i].s>k
- a[i].s>=k
- a[i].e>k
- a[i].e>=k
65ti{{ select(65) }}
- ans+=a[i].s
- ans+=a[i].e
- ans++;
- k++,ans++
