第 1 题
中国的国家顶级域名是(A)
A. cn B.ch C. chn D.china
这一题自己背,当然还是讲一下各种域名来复习一下。
1. 顶级域名(TLD)
顶级域名是域名系统中最顶层的域名,它分为两类:
通用顶级域名(gTLD):
- .com:商业网站(最常见的域名后缀)
- .org:组织或非营利机构
- .net:网络服务提供商
- .info:信息网站
- .biz:商业用途
- .name:个人网站
- .pro:专业人士
- .xyz:泛用型,适用于各种用途
国家代码顶级域名(ccTLD):
- .cn:中国
- .us:美国
- .uk:英国
- .jp:日本
- .de:德国
- .fr:法国
- .ca:加拿大
2. 二级域名
二级域名位于顶级域名下,可以用来进一步细分和组织网站。通常用来表示特定的组织或公司。例如:
- example.com:
example
是二级域名,com
是顶级域名。- google.co.uk:
co
是三级域名,uk
是顶级域名。3. 子域名
子域名是在二级域名下进一步划分的域名,用于创建特定的分区。例如:
- blog.example.com:
blog
是子域名,example.com
是二级域名。- shop.example.com:
shop
是子域名,example.com
是二级域名。4. 新顶级域名(New gTLD)
新顶级域名是近年来引入的顶级域名,用于提供更多的选择和灵活性。例如:
- .app:应用程序相关网站
- .tech:技术相关网站
- .store:在线商店
- .online:通用类型
- .club:俱乐部相关网站
5. 功能性域名
这些域名通常用于特定的功能或服务:
- .edu:教育机构(主要用于高等教育机构)
- .gov:政府网站(主要用于美国政府机构)
- .mil:军事网站(主要用于美国军事机构)
6. 国际化域名(IDN)
国际化域名允许使用非拉丁字符的域名,例如中文、阿拉伯文等:
- .中国(
.xn--fiqs8s
):中文顶级域名- .한국(
.xn--3e0b707e
):韩文顶级域名7. 临时和虚拟域名
这些域名通常用于特定的测试、开发或虚拟用途:
- .test:用于测试和开发
- .example:用于文档和示例
相信应该写的很清楚了
第 2 题
二进制数 11 1011 1001 011111 1011 1001 0111 和 01 0110 1110 101101 0110 1110 1011 进行按位与运算的结果是(D)。
编者注:原题为“逻辑与”,但是根据题意应当是按位与。
A. 01 0010 1000 101101 0010 1000 1011 B. 01 0010 1001 001101 0010 1001 0011
C. 01 0010 1000 000101 0010 1000 0001 D. 01 0010 1000 001101 0010 1000 0011
这里也是讲到了逻辑运算符,那么就全部讲一下好吧。
1.与 & 只有两个都为1才为1,否则为0
2.或 | 只要有一个为1就为1
3.异或 ⊕ 不同为1否则为0
那么说到异或怎么记忆呢?
可以做不进位加法。
4.非 ~ 也就是取反
下面看题目:
11 1011 1001 011111 1011 1001 0111
01 0110 1110 101101 0110 1110 1011
——————————————————————
01 0010 1000 001101 0010 1000 0011
答案很明显选D
第 3 题
一个 32位整型变量占用(C)个字节。
A. 32 B. 128 C.4 D.8
这道题目很简单。
32位整型变量有32位,每个字节由8位组成,所以32位除以8位等于4字节。
既然说到了字节,那么顺带复习一下我们的进制:
- 1 字节 = 8 位
- 1 千字节 (KB) = 1024 字节
- 1 兆字节 (MB) = 1024 KB
- 1 吉字节 (GB) = 1024 MB
- 1 太字节 (TB) = 1024 GB
要记住几乎都是1024
第 4 题
若有如下程序段,其中 s
、a
、b
、c
均已定义为整型变量,且 a
、c
均已赋值(c
大于0)
则与上述程序段功能等价的赋值语句是(A)
s = a;
for (b = 1; b <= c; b++) s = s - 1;
A. s = a - c;
B. s = a - b
C. s = s - c;
D. s = b - c;
这道题有一点点绕,但是还是太简单了
你看这个代码的意思等于什么:
就是s=a,s=s-c
所以明显选A啊
∵s=a
∴s=a-c
第 5 题
设有 100 个已排好序的数据元素,采用折半查找时,最大比较次数为(A)
A. 7 B. 10 C. 6 D. 8
折半查找也就是二分查找,这个懂得都懂,不懂得在评论区问吧,太简单了……
折半查找最坏情况为+1。
那么离100最近的是2^6,所以最大比较次数为6+1=7
第 6 题
链表不具有的特点是(D)
A. 插入删除不需要移动元素 B. 不必事先估计存储空间
C. 所需空间与线性表长度成正比 D. 可随机访问任一元素
终于到不擅长的题目了……
链表的主要特点包括:
1. 动态大小
- 特点:链表的大小可以动态调整。可以在运行时插入或删除元素,而不需要事先分配固定大小的内存。
- 好处:灵活性高,不需要预设大小。
2. 节点结构
- 特点:链表由多个节点组成。每个节点包含数据和指向下一个节点的指针(在单链表中)或指向前后节点的指针(在双链表中)。
- 组成:
- 数据部分:存储实际的数据。
- 指针部分:指向链表中的下一个节点(或前后节点)。
3. 插入和删除操作效率高
- 特点:在链表中插入或删除节点的时间复杂度通常是 O(1),前提是知道插入或删除的位置。
- 好处:特别适合需要频繁插入和删除操作的应用场景。
4. 不支持随机访问
- 特点:链表不支持直接访问特定位置的元素。需要从头节点开始逐步访问,直到找到目标节点。
- 缺点:访问特定元素的时间复杂度是 O(n),其中 n 是链表的长度。
5. 内存开销
- 特点:每个节点除了存储数据外,还需要额外的内存来存储指针(或两个指针,在双链表中)。
- 缺点:相比于数组,链表的内存开销较大。
6. 链表类型
- 单链表:每个节点只有一个指针,指向下一个节点。
- 双链表:每个节点有两个指针,分别指向下一个节点和前一个节点。
- 循环链表:链表的最后一个节点指向第一个节点,形成一个环。
- 双向循环链表:结合了双链表和循环链表的特点,节点既指向下一个节点,也指向前一个节点,并且形成一个环。
7. 灵活性
- 特点:链表可以很容易地扩展以存储不同类型的数据(如整数、字符、对象等)。
- 好处:能够根据需要设计适应性较强的数据结构。
8. 链表与数组比较
- 内存分配:链表的内存是动态分配的,而数组是静态分配的。
- 数据访问:链表的访问速度较慢(需要遍历),数组则可以直接通过索引访问。
9. 常见应用
- 实现栈和队列:链表常用于实现栈(LIFO)和队列(FIFO)数据结构。
- 动态数据集合:适合处理大小不固定的数据集合,或频繁发生插入和删除操作的场景。
至于为什么不擅长,因为懒得背
第 7 题
把 8 个同样的球放在 5 个同样的袋子里,允许有的袋子空着不放,问共有多少种不同的分法?(C)
提示:如果 8 个球都放在一个袋子里,无论是哪个袋子,都只算同一种分法。
A. 22 B. 24 C. 18 D. 20
这一题排列组合,我学一会……
其实会的但是……
笑死我直接枚举,这个枚举都会,自己慢慢画吧……
第 8 题
一棵二叉树如右图所示,若采用顺序存储结构,即用一维数组元素存储该二叉树中的结点(根结点的下标为 1,若某结点的下标为 i,则其左孩子位于下标 处、右孩子位于下标 +1 处),则该数组的最大下标至少为(C)。
A. 6 B. 10 C. 15 D. 12
这一题首先不是要你蒙,不过可以蒙……
ABD是偶数,C是奇数,选C……
结论完全正确,只是要知道为什么。
是因为最下面的叶节点在右边,所以下标应为-1,且选项中只有15是单数,所以选C
第 9 题
100 以内最大的素数是(B)。
A. 89 B. 97 C. 91 D. 93
这一题似乎不用多说,因为ABCD中最大的是97,而且97是素数所以选B
第 10 题
319 和 377 的最大公约数是(C)。
A. 27 B. 33 C. 29 D. 31
考虑到在考场上要用短除法来做,所以还是示范一下吧:
确实有一点难度,因为还是挺难想到的
第 11 题
新学期开学了,小胖想减肥,健身教练给小胖制定了两个训练方案。
- 方案一:每次连续跑 3 公里可以消耗 300 千卡(耗时半小时);
- 方案二:每次连续跑 5 公里可以消耗 600 千卡(耗时 11 小时)。
小胖每周周一到周四能抽出半小时跑步,周五到周日能抽出一小时跑步。
另外,教练建议小胖每周最多跑21公里,否则会损伤膝盖。
请问如果小胖想严格执行教练的训练方案,并且不想损伤膝盖,每周最多通过跑步消耗多少千卡?(C)
A. 3000 B. 2500 C. 2400 D. 2520
这道题没有难度,因为是最基础的数学题。
因为跑5公里最划算,所以3*600=1800
再把剩下的加一下:1800+2*300=2400
注意:这是重点哦,不一定所有的都要想让利益最大,万一出题组发神经让你掉下陷阱。
例如跑5公里不能和3公里加在一起是X公里,可能用小的共优。
第 12 题
—副纸牌除掉大小王有 52 张牌,四种花色,每种花色 13 张。
假设从这 52 张牌中随机抽取 13 张纸牌,则至少(A)张牌的花色一致。
A. 4 B. 2 C. 3 D. 5
这不是我一年级奥数题嘛……
13/4=3……1
3+1=4
为什么呢……
因为让结果最少,每个花色轮流一遍就好了
第 13 题
—些数字可以颠倒过来看,例如 0,1,8 颠倒过来还是本身,6 颠倒过来是 9 颠倒过来看还是 6,其他数字颠倒过来都不构成数字。
类似的,一些多位数也可以颠倒过来看,比如 106 颠倒过来是 901。假设某个城市的车牌只由 5 位数字组成,每一位都可以取 0 到 9。
请问这个城市最多有多少个车牌倒过来恰好还是原来的车牌?(C)
A. 60 B. 125 C. 75 D. 100
因为只有0,1,8倒过来是它自己,所以每一位都只能是0,1,8.
但是在第1,2,4,9位填6或9还是相同的。
所以有5 * 5 * 3 * 1 * 1 = 75。选C
第 14 题
假设一棵二叉树的后序遍历序列为 DGJHEBIFCA,中序遍历序列为 DBGEHJACIF,则其前序遍历序列为(B)。
A. ABCDEFGHIJABCDEFGHIJ B. ABDEGHJCFIABDEGHJCFI
C. ABDEGJHCFIABDEGJHCFI D. ABDEGHJFICABDEGHJFIC
这个是二叉树题,我以前博客写过怎么遍历二叉树,所以有需要的可以去看
这题选B(不是偷懒是以前讲的很详细了)
第 15 题
以下哪个奖项是计算机科学领域的最高奖?(A)
A. 图灵奖 B. 鲁班奖 C. 诺贝尔奖 D. 普利策奖
这一道题本身没什么好讲的,但是有一些知识点希望大家记一下:
1.姚期智于2000年获图灵奖
2.王选因发明汉字激光照排系统,被誉为“当代毕昇”(为了纪念王院士有中国计算机学会王选奖)
3.记住计算机领域的奖不只有图灵奖,但是图灵奖最容易考
第 16 题
二、阅读程序(程序输入不超过数组或字符串定义的范围;判断题正确填 √,错误填 ×;除特殊说明外,判断题 1.5 分,选择题 3 分,共计 40分)
#include <cstdio>
#include <cstring>
using namespace std;
char st[100];
int main() {
scanf("%s", st);
int n = strlen(st);
for (int i = 1; i <= n; ++i) {
if (n % i == 0) {
char c = st[i - 1];
if (c >= 'a')
st[i - 1] = c - 'a' + 'A';
}
}
printf("%s", st);
return 0;
}
1.输入的字符串只能由小写字母或大写字母组成。(×)
没人规定只能输入字母,明显是错
2.若将第 8 行的 i = 1
改为 i = 0
,程序运行时会发生错误。(√)
这个把i改成0的话少输入了一个,所以肯定是对的
3.将第 8 行的 i <= n
改为 i * i <= n
,程序运行结果不会改变。(×)
i * i代表了什么?少判断了很多啊,一般我们只有优化代码(仅限有规律的)才用i*i。
相当于i=1,i<=sqrt(n)。所以明显是错的啊
4.若输入的字符串全部由大写字母组成,那么输出的字符串就跟输入的字符串一样。(√)
肯定是对的,因为大致意思是把n的因子(不含自己)的小写字母转成大写字母,所以啊,打勾
5.若输入的字符串长度为 18,那么输入的字符串跟输出的字符串相比,至多有(B)个字符不同。
A. 18 B. 6 C. 10 D. 1
18的最大的因子(不含自己)是6。所以果断选B。
6.若输入的字符串长度为(B),那么输入的字符串跟输出的字符串相比,至多有 36 个字符不同。
A. 36 B. 100000 C. 1 D. 128
这一题不必多说了看一下因子就可以了,有100000是36的倍数,选B
第 17 题
#include<cstdio>
using namespace std;
int n, m;
int a[100], b[100];
int main() {
scanf("%d%d", &n, &m);
for (int i = 1; i <= n; ++i)
a[i] = b[i] = 0;
for (int i = 1; i <= m; ++i) {
int x, y;
scanf("%d%d", &x, &y);
if (a[x] < y && b[y] < x) {
if (a[x] > 0)
b[a[x]] = 0;
if (b[y] > 0)
a[b[y]] = 0;
a[x] = y;
b[y] = x;
}
}
int ans = 0;
for (int i = 1; i <= n; ++i) {
if (a[i] == 0)
++ans;
if (b[i] == 0)
++ans;
}
printf("%d", ans);
return 0;
}
假设输入的 n 和 m 都是正整数,x 和 y 都是在 [1,n] 的范围内的整数,完成下面的判断题和单选题:
判断题
1.当 m>0 时,输出的值一定小于 2n。(√)
这一题很明显,因为如果m=0,那么ans=2n,如果m>0,那么ans肯定是小于2n的啊,
故是对的
2.执行完第 27 行的 ++ans
时,ans —定是偶数。(×)
这个是弱智题,谁说就一定是偶数的,为什么不能是奇数呢?
上证据:
3.a[i]
和 b[i]
不可能同时大于 0。(×)
题目没说啊,所以是错的
4.右程序执行到第 13 行时,x 总是小于 y,那么第 15 行不会被执行。(×)
这个题目有点简单阿。就是这一眼错的是CSP吗?
选择题
5.若m 个 x 两两不同,且 m 个 y 两两不同,则输出的值为(A)
A. 2n−2m B. 2n+2 C. 2n−2 D. 2n
这个多看看代码就行了,真的没什么好讲的……
6.m 个 x 两两不同,且 m 个 y 都相等,则输出的值为(A)
A. 2n−2 B. 2n C.2m D. 2n−2m
这个是真的不好讲……因为你模拟一下就好了
第 18 题
#include <iostream>
using namespace std;
const int maxn = 10000;
int n;
int a[maxn];
int b[maxn];
int f(int l, int r, int depth) {
if (l > r)
return 0;
int min = maxn, mink;
for (int i = l; i <= r; ++i) {
if (min > a[i]) {
min = a[i];
mink = i;
}
}
int lres = f(l, mink - 1, depth + 1);
int rres = f(mink + 1, r, depth + 1);
return lres + rres + depth * b[mink];
}
int main() {
cin >> n;
for (int i = 0; i < n; ++i)
cin >> a[i];
for (int i = 0; i < n; ++i)
cin >> b[i];
cout << f(0, n - 1, 1) << endl;
return 0;
}
1.如果 a 数组有重复的数字,则程序运行时会发生错误。(×)
这个是常识,但是还是要讲的
一般程序运行时报错是:数组越界(其他几乎没有)
2.如果 b 数组全为 0,则输出为 0。(√)
看这一行:
return lres + rres + depth * b[mink];
注意*b[mink],b全部为0啊,怎么*都是0。
3.当n=100 时,最坏情况下,与第 12 行的比较运算执行的次数最接近的是:(A)。
A. 5000 B. 600 C. 6 D. 100
100+99+98+……+3+2+1=5050。
至于怎么算呢……
(100+1)*100/2=5050
所以这就是等差数列。
公式自己背:
(前项+后项)*项数(记得不是减1)/2
4.当n=100时,最好情况下,与第12行的比较运算执行的次数最接近的是(C)
A.100 B.6 C.5000 D.600
这里给一下提示:就是二分。
二分在前面的题讲过了
100的话在~之间。
也就是说答案在600~700之间,所以选D。
5.当n=10 时,若 b 数组满足,对任意 0≤i<n,都有 b[i] = i + 1
,那么输出最大为(D)。
A.386 B.383 C.384 D.385
这边的话画一下图模拟得1*1+2*2+3*3+……+9*9+10*10=385
6.当 n=100 时,若 b 数组满足,对任意 0≤i<n,都有 b[i]=1
,那么输出最小为(B)。
A.582 B.580 C.579 D.581
这边也是画一下图就行了:1*1+2*2+4*3+8*4+16*5+32*6+37*7=580