一、单项选择题(共15题,每题4分,共计60分,每题有且仅有一个正确选项)
1.计算机直接识别和执行的语言是( )。
A.C++语言 B.机器语言 C.自然语言 D.汇编语言
2.LAN在计算机科学技术领域的常见含义是( )。
A.互联网 B.万维网 C.局域网 D.无线局域网
3. 以下排序算法中不是稳定排序的是?( )。
A.希尔排序 B.归并排序 C.冒泡排序 D.插入排序
4.n(n≥2)个点的简单无向图最多有多少条边( )。
A.n-1 B.n C.n2 D.n*(n-1)/2
5.对于一个五进制数14.32转换成十进制应该是( )。
A.8.62 B.9.68 C.9.74 D.10.56
6.对于一个八进制数4762转换成十六进制应该是( )。
A.9EA B.9EF C.9F0 D.9F2
7.设x=false,y=true,z=false,以下逻辑运算表达式值为真的是( )。
A.x∨z∧y B.(x∨y)∧(y∨z)
C.x∧y∨z∧y D.x∧(z∨y)∧z
8.将9本相同的书放到3个不同的书柜里,不可以有书柜空着,有( )种不同的方式。
A.28 B.30 C.32 D.34
9.先进先出、后进后出的数据结构是( )。
A.链表 B.二叉树 C.栈 D.队列
10.中缀表达式9*3+2*(6+3)/4-5转为后缀表达式是( )。
A.9 3 *
2 + 6 * 3 + 4 / 5 - B.9 3 * 2 6 3 + * + 4 5 / -
C.9 3 * 2 + 6 3 + * 4 / 5 - D.9 3 * 2 6 3 + * 4 / + 5 -
11.有六个元素DABCFE从左至右依次顺序进栈,在进栈过程种会有元素被弹出栈。问下列哪一个不可能是合法的出栈序列( )。
A.BACEFD B.DCBFAE C.ACDBFE D.FCEBAD
12.一个包含n个节点的满二叉树,它的叶子节点数目为( )。
A.n B. n/2 C. (n+1)/2 D. (n-1)/2
13.有一段长度为2分钟的视频,分辨率是2560×1440,每帧图像都是32位真彩色图像,在10%的压缩率下大小约位3.955GiB,视频的帧率为( )。
A.15Hz B.24Hz C.30Hz D.60Hz
14.C++语言种,定义rd()为等概率随机生成unsigned int范围内的一个整数,那么等概率随机生成unsigned long
long范围内的一个整数应该为( )。
A.1ull*rd()*rd() B.rd()<<32|rd()
C.1ull*rd()<<32|rd() D.rd()+rd()
15.将3个红球,4个绿球,3个白球排成一行,有几种不同的排法( )。
A.4200 B.
4000 C.3628800 D.362880
二、阅读程序(程序输入不超过数组或字符串定义的范围,判断题正确填√,错误填×,除特殊说明外,判断题3分,选择题4分,共计20分)
16.
#include<bits/stdc++.h>
using namespace std;
const int N = 1e5 + 5;
typedef long long LL;
int a[N], b[N], c[N];
int main(){
int
n;
cin
>> n;
for(int
i=1; i<=n; i++)
scanf("%d",
&a[i]);
for(int
i=1; i<=n; i++)
scanf("%d",
&b[i]);
for(int
i=1; i<=n; i++)
scanf("%d",
&c[i]);
sort(a+1,
a+n+1);
sort(b+1,
b+n+1);
sort(c+1,
c+n+1);
LL
ans = 0;
int
cnta = 1, cntc = 1;
for(int
i=1; i<=n; i++) {
while(cnta
<= n && a[cnta] < b[i])
cnta++;
while(cntc
<= n && c[cntc] <= b[i])
cntc++;
ans
+= (LL)(cnta - 1) * (n - cntc + 1);
}
cout
<< ans;
return
0;
}
假设读入的n,ai,bi,ci是不超过105的正整数,完成下面的题目
●判断题
(1)该算法的时间复杂度是O(n2)。 ( )
(2)该程序输出的答案不超过n3。 ( )
(3)代码运用了二分查找来计算cnta和cntc。 ( )
(4)如果n的范围是n≤2000,那么ans不需要开long long。 ( )
●选择题
(5)将代码的while循环替换成lower_bound和upper_bound,总时间复杂度为( )。
A. O(n) B. O(nlogn) C. O(nlog2n) D. O(n2)
(6)当输入为3 1 1 1
2 2 2 3 3 3时,输出结果是( )?
A.27 B.21 C. 10 D. 9
三、完善程序(单选题,每题4分,共计20分)
17.(双重素数)定义双重素数为这样的素数:它的各位数字之和也是一个素数。T组询问,每组询问给定一个闭区间[l, r],求该区间内双重素数的个数。T≤100,1≤l≤r≤108。
#include<bits/stdc++.h>
using namespace std;
const int n = 1e8;
int cnt, p[n / 10];
bitset<n+1> vis;
void getprime() {
for(int
i=2; i<=n; i++) {
if(!vis[i])
p[++cnt]
= i;
for(int
j=1; i*p[j]<=n; j++) {
vis[i*p[j]]
= 1;
if(____①____)
break;
}
}
}
int calc(int x) {
int
ans = 0;
while(x)
{
____②____;
x
/= 10;
}
return
ans;
}
void getdprime() {
int
cntt = 0;
for(int
i=1; i<=cnt; i++)
if(____③____)
p[++cntt]
= p[i];
cnt
= cntt;
}
int main(){
getprime();
getdprime();
int
t;
scanf("%d",
&t);
while(t--)
{
int
l, r;
scanf("%d%d",
&l, &r);
int
ans1 = ____④____;
int
ans2 = ____⑤____;
printf("%d\n",
ans1 - ans2);
}
return
0;
}
(1)①处应填( )。
A. i % p[j] B.
i * p[j] ≤ n
C. !(i % p[j]) D. i > p[j]
(2)②处应填( )。
A. ans = x B. ans = x % 10
C. ans += x D. ans
+= x % 10
(3)③处应填( )。
A. !vis[calc(p[i])] B. !vis[p[i]]
C. calc(p[i]) D.
vis[calc(p[i])]
(4)④处应填( )。
A. lower_bound(p+1, p+cnt+1, r) - p - 1
B. lower_bound(p+1, p+cnt+1, r) - p
C. upper_bound(p+1, p+cnt+1, r) -
p - 1
D. upper_bound(p+1, p+cnt+1, r) -
p
(5)⑤处应填( )。
A. lower_bound(p+1, p+cnt+1, l) -
p - 1
B. lower_bound(p+1, p+cnt+1, l) - p
C. upper_bound(p+1, p+cnt+1, l) -
p - 1
D. upper_bound(p+1, p+cnt+1, l) -
p