一、单选题
1、 计算机如果缺少( ),将无法正常启动。
A 内存
B、
鼠标
C、
U盘
D、
摄像头
2、( )是一种先进先出的线性表。
A 栈
B 队列
C 哈希表(散列表)
D 二叉树
3、目前计算机芯片(集成电路)制造的主要原料是( ),它是一种可以在沙子中提炼出的物质。
A 硅
B 铜
C 锗
D 铝
4、十六进制数 9A 在( )进制下是 232 。
A 四
B 八
C 十
D 十二
5、( )不属于操作系统。
A Windows
B DOS
C PhotoShop
D NOI Linux
6、如果一棵二叉树的中序遍历是BAC,那么它的先序遍历不可能 是( )。
A、
ABC
B、
CBA
C、
ACB
D、 BAC
7、目前个人电脑的( )市场占有率最靠前的厂商包括Intel、AMD等公司。
A、
显示器
B、 CPU
C、
内存
D、
鼠标
8、使用冒泡排序对序列进行升序排序,列每执行一次交换操作将会减少1个逆序对, 因此序
5, 4, 3, 2, 1
需要执行( )次交换操作,才能完成冒泡排序。
A 0
B 5
C 1
D、
15
9、1946 年诞生于美国宾夕法尼亚大学的ENIAC属于( )计算机。
A 电子管
B 晶体管
C 集成电路
D 超大规模集成电路
10、无论是TCP/IP模型还是OSI模型,都可以视为网络的分层模型,每个网络协议都会被归入某一层中。如果用现实生活中的例子来比喻这些“层”,以下最恰当的是 ( )。
A 中国公司的经理与法国公司的经理交互商业文件
B 军队发布命令
C 国际会议中,每个人都与他国地位对等的人直接进行会谈
D 体育比赛中,每一级比赛的优胜者晋级上一级比赛
11、矢量图(Vector Image)图形文件所占的存储空间较小,并且不论如何放大、缩小或旋转等都不会失真,是因为它( )。
A 记录了大量像素块的色彩值来表示图像
B 用点、直线或者多边形等基于数学方程的几何图元来表示图像
C 每个像素点的颜色信息均用矢量表示
D 把文件保存在互联网,采用在线浏览的方式查看图像
12、如果一个栈初始时为空,且当前栈中的元素从栈底到栈顶依次为a, b,c(如右图所示),另有元素d已经出栈,则可能的入栈顺序是( )。
A a, d, c, b
B b, a, c, d
C a, c, b, d
D d, a, b, c
13、( )是主要用于显示网页服务器或者文件系统的 HTML 文件内容,并让用户与这些文件交互的一种软件。
A 资源管理器
B 浏览器
C 电子邮件
D 编译器
14、( )是目前互联网上常用的E-mail服务协议。
A HTTP
B FTP
C POP3
D Telnet
15、( )就是把一个复杂的问题分成两个或者更多的相同或相似的子问题,再把子问题分成更小的子问题……直到最后的子问题可以简单的直接求解。而原问题的解就是子问题解的并。
A 动态规划
B 贪心
C 分治
D 搜索
16、地址总线的位数决定了CPU可直接寻址的内存空间大小,例如地址总线为16 位, 其最大的可寻址空间为64KB 。如果地址总线是32 位,则理论上最大可寻址的内存空间为( ) 。
A 128KB
B 1MB
C 1GB
D 4GB
17、蓝牙和Wi-Fi都是( )设备。
A 无线广域网
B 无线城域网
C 无线局域网
D 无线路由器
18、在程序运行过程中,如果递归调用的层数过多,会因为( )引发错误。
A 系统分配的栈空间溢出
B 系统分配的堆空间溢出
C 系统分配的队列空间溢出
D 系统分配的链表空间溢出
19、原字符串中任意一段连续 的字符组成的新字符串称为子串。则字符串“ AAABBBCCC”共有( )个 不同的非空子串 。
A 3
B 12
C 36
D 45
20、仿生学的问世开辟了独特的科学技术发展道路。人们研究生物体的结构、功能和工作原理,并将这些原理移植于新兴的工程技术之中。以下关于仿生学的叙述,错误的是( )。
A 由研究蝙蝠,发明雷达
B 由研究蜘蛛网,发明因特网
C 由研究海豚,发明声纳
D 由研究电鱼,发明伏特电池
二、简答题
21、如果平面上任取n个整点(横纵坐标都是整数) ,其中一定存在两个点,它们连线的中点也是整点,那么n至少是 。
参考答案:如果平面上任取n个整点(横纵坐标都是整数),其中一定存在两个点,它们连线的中点也是整点,那么n至少是4。
22、在NOI期间,主办单位为了欢迎来自全国各地的选手,举行了盛大的晚宴。在第十八桌,有5名大陆选手和5名港澳选手共同进膳。为了增进交流,他们决定相隔就坐,即每个大陆选手左右相邻的都是港澳选手、每个港澳选手左右相邻的都是大陆选手。那么,这一桌共有 种不同的就坐方案。注意:如果在两个方案中,每个选手左边相邻的选手均相同,则视为同一个方案。
参考答案:120
23、
#include <iostream> using namespace std; int a, b, c, d, e, ans; int main() { cin>>a>>b>>c; d = a+b; e = b+c; ans = d+e; cout<<ans<<endl; }
输入: 1 2 5
输出:
参考答案:输入:1 2 5输出:8
24、
#include<iostream> using namespace std; int n, i, ans; int main() { cin>>n; ans = 0; for (i = 1; i <= n; i++) if (n % i == 0) ans++; cout<<ans<<endl; }
输入: 18
输出:
参考答案:输出为4
25、
#include <iostream> using namespace std; int n, i,j, a[100][100]; int solve(int x, inty) { int u, v; if (x == n) return a[x][y]; u = solve(x + 1, y); v = solve(x + 1, y + 1); if (u > v) return a[x][y] + u; else return a[x][y] + v; } int main() { cin>>n; for (i = 1; i <= n; i++) for (j = 1; j <= i; j++) cin>>a[i][j]; cout<<solve(1, 1)<<endl; return 0; }
输入 :
5
2
-1 4
2 -1 -2
-1 6 4 0
3 2 -1 5 8
输出:
参考答案:输出:10
26、
#include <iostream> #include <string> using namespace std; int n, ans, i, j; string s; charget(inti) { if (i < n) return s[i]; else return s[i-n]; } int main() { cin>>s; n = s.size(); ans = 0; for (i = 1; i <= n-1; i++) { for (j = 0; j <= n-1; j++) if (get(i+j) < get(ans+j)) { ans = i; break; } else if (get(i+j) > get(ans+j)) break; } for (j = 0; j <= n-1; j++) cout<<get(ans+j); cout<<endl; }
输入: CBBADADA
输出:
参考答案:输出:CB
三、实操题
27、完善程序:坐标统计
输入 n 个整点在平面上的坐标。 对于每个点,可以控制所有位于它左下方的点(即 x 、y 坐标都比它小),它可以控制的点的数目称为“战斗力”。依次输出每个点的战斗力,最后输出战斗力最高的点的编号(如果两个点战斗力一样, 输出较大的编号)。
#include<iostream>
using namespace std;
const int SIZE = 100;
intx[SIZE], y[SIZE], f[SIZE];
int n, i,j, max_f, ans;
int main()
{
cin>>n;
for (i = 1; i <= n; i++)
cin>>x[i]>>y[i];
max_f = 0;
for (i = 1; i <= n; i++)
{
f[i] = ① ;
for (j = 1; j <= n; j++)
{
if (x[j] < x[i] && ② )
③
}
if ( ④ )
{
max_f = f[i];
⑤ ;
}
}
for (i = 1; i <= n; i++)
cout<<f[i]<<endl;
cout<<ans<<endl;
}
参考答案:① f[i] = 0;② y[j] < y[i]③ f[i]++④ f[i] > max_f⑤ ans = i;
28、
完善程序:(排列数)输入两个正整数n, m (1 ≤n ≤20, 1 ≤m ≤n),在 1~n 中任取 m 个数,按字典序从小到大输出所有这样的排列。例如
输入
3 2
输出:
1 2 1 3 2 1 2 3 3 1 3 2
#include<iostream>
#include<cstring>
using namespace std;
const int SIZE = 25;
bool used[SIZE];
int data[SIZE];
int n, m, i,j, k;
bool flag;
int main()
{
cin>>n>>m;
memset(used, false, sizeof(used));
for (i = 1; i <= m; i++)
{
data[i] = i;
used[i] = true;
}
flag = true;
while (flag)
{
for (i = 1; i <= m-1; i++) cout<<data[i]<<" ";
cout<<data[m]<<endl;
flag = ① ;
for (i = m; i >= 1; i--)
{
② ;
for (j = data[i]+1; j <= n; j++) if (!used[j])
{
used[j] = true;
data[i] = ③ ;
flag = true;
break;
}
if (flag)
{
for (k = i+1; k <= m; k++)
for (j = 1; j <= ④ ; j++) if (!used[j])
{
data[k] = j;
used[j] = true;
break;
}
⑤ ;
}
}
}
}
参考答案:①flag = false;②if (!used[data[i]-1]) data[i]--;③data[i] = j;④k;⑤flag = true;
喵呜刷题:让学习像火箭一样快速,快来微信扫码,体验免费刷题服务,开启你的学习加速器!