通过海量题库、编程比赛和实时排名,系统化提升您的编程能力。
第1题
2E+03 表示( )
2.03
5
8
2000
第2题
一个字节( byte )由( )个二进制位组成
16
32
以上都有可能
第3题
以下逻辑表达式的值恒为真的是( )
P∨(┐P ∧Q) ∨(┐P∧┐Q)
Q∨ (┐P∧Q) ∨(P∧┐Q)
P∨Q∨(P∧┐Q) ∨(┐P ∧Q)
P∨ ┐Q∨(P ∧┐Q) ∨(┐P∧┐Q)
第4题
Linux 下可执行文件的默认扩展名为( )
exe
com
dll
以上都不是
第5题
如果树根算第 1 层,那么一棵 n 层的二叉树最多有( )个结点
2^n-1
2^ n
2 n +1
2 ^(n+1)
第6题
提出“存储程序”的计算机工作原理的是( )
克劳德·香农
戈登·摩尔
查尔斯·巴比奇
冯·诺依曼
第7题
设 X、Y、Z 分别代表三进制下的一位数字,若等式 XY + ZX = XYX 在三进制下成立, 那么同样在三进制下,等式 XY * ZX = ( )也成立。
YXZ
ZXY
XYZ
XZY
第8题
Pascal 语言、 C 语言和 C++ 语言都属于( )
面向对象语言
脚本语言
解释性语言
编译性语言
第9题
前缀表达式“ + 3 * 2 + 5 12 ”的值是( )
23
25
37
65
第10题
主存储器的存取速度比中央处理器( CPU)的工作速度慢得多, 从而使得后者的效率受 到影响。 而根据局部性原理, CPU所访问的存储单元通常都趋于聚集在一个较小的连续区域 中。于是,为了提高系统整体的执行效率,在 CPU中引入了( )。
寄存器
高速缓存
闪存
外存
第11题
一个字长为 8 位的整数的补码是 11111001 ,则它的原码是( )
00000111
01111001
11111001
10000111
第12题
基于比较的排序时间复杂度的下限是( ),其中 n 表示待排序的元素个数。
O(n)
O(n log n)
O(log n)
O(n ^2 )
第13题
一个自然数在十进制下有 n 位,则它在二进制下的位数与( )最接近。
5n
n*log2 10
10*log2 n
10 ^n log2 n
第14题
在下列 HTML 语句中,可以正确产生一个指向 NOI 官方网站的超链接的是( )
<a url=“http://www.noi.cn”>欢迎访问NOI网站</a>
<a href=“http://www.noi.cn”>欢迎访问NOI网站</a>
<a> http://www.noi.cn</a>
<a name=“http://www.noi.cn”>欢迎访问NOI网站</a>
第15题
元素 R1、R2、R3、R4、R5 入栈的顺序为 R1、R2、R3、R4、R5。如果第 1 个出栈的 是 R3,那么第 5 个出栈的不可能是( )。
R1
R2
R4
R5
第16题
双向链表中有两个指针域 llink 和 rlink ,分别指向该结点的前驱及后继。 设 p 指向 链表中的一个结点,它的左右结点均非空。现要求删除结点 p ,则下面语句序列中错误的是 ( )。
p->rlink->llink = p->rlink; p->llink->rlink = p->llink; delete p;
p->llink->rlink = p->rlink; p->rlink->llink = p->llink; delete p;
p->rlink->llink = p->llink; p->rlink->llink->rlink = p->rlink; delete p;
p->llink->rlink = p->rlink; p->llink->rlink->llink = p->llink; delete p;
第17题
一棵二叉树的前序遍历序列是 ABCDEFG,后序遍历序列是 CBFEGDA,则根结点的左 子树的结点个数可能是( )。
2
3
4
第18题
关于拓扑排序,下面说法正确的是( )。
所有连通的有向图都可以实现拓扑排序
对同一个图而言,拓扑排序的结果是唯一的
拓扑排序中入度为 0 的结点总会排在入度大于 0 的结点的前面
拓扑排序结果序列中的第一个结点一定是入度为 0 的点
第19题
完全二叉树的顺序存储方案,是指将完全二叉树的结点从上至下、从左至右依次存放 到一个顺序结构的数组中。假定根结点存放在数组的 1 号位置,则第 k 号结点的父结点如 果存在的话,应当存放在数组的( )号位置。
2k
2k+1
⌊k/2⌋
⌊(k+1)/2⌋
第20题
全国青少年信息学奥林匹克系列活动的主办单位是( )。
教育部
科技部
共青团中央
中国计算机学会
第21题
LZW 编码是一种自适应词典编码。在编码的过程中,开始时只有一部基础构造元素的编 码词典, 如果在编码的过程中遇到一个新的词条, 则该词条及一个新的编码会被追加到词典 中,并用于后继信息的编码。 举例说明,考虑一个待编码的信息串: “xyx yy yy xyx” 。初始词典只有 3 个条目, 第一个为 x,编码为 1;第二个为 y,编码为 2 ;第三个为空格,编码为 3;于是串 “xyx” 的编码为 1-2-1 (其中 – 为编码分隔符) ,加上后面的一个空格就是 1-2-1-3 。但由于有了 一个空格, 我们就知道前面的 “xyx” 是一个单词, 而由于该单词没有在词典中, 我们就可以 自适应的把这个词条添加到词典里,编码为 4 ,然后按照新的词典对后继信息进行编码,以 此类推。于是,最后得到编码: 1-2-1-3-2-2-3-5-3-4 。 现在已知初始词典的 3 个条目如上述,则信息串 “yyxy xx yyxy xyx xx xyx” 的 编码是___________
第22题
队列快照是指在某一时刻队列中的元素组成的有序序列。例如,当元素 1 、2 、3 入队, 元素 1 出队后, 此刻的队列快照是 “2 3” 。当元素 2、3 也出队后,队列快照是 “” ,即为空。 现有 3 个正整数元素依次入队、出队。已知它们的和为 8,则共有 _________ 种可能的不 同的队列快照(不同队列的相同快照只计一次)。例如, “5 1″ 、”4 2 2″ 、”” 都是可能 的队列快照;而 “7” 不是可能的队列快照,因为剩下的 2 个正整数的和不可能是 1。
第23题
#include<iostream> using namespace std; void swap(int & a, int & b) { int t; t = a; a = b; b = t; } int main() { int a1, a2, a3, x; cin>>a1>>a2>>a3; if (a1 > a2) swap(a1, a2); if (a2 > a3) swap(a2, a3); if (a1 > a2) swap(a1, a2); cin>>x; if (x < a2) if (x < a1) cout<<x<<' '<<a1<<' '<<a2<<' '<<a3<<endl; else cout<<a1<<' '<<x<<' '<<a2<<' '<<a3<<endl; else if (x < a3) cout<<a1<<' '<<a2<<' '<<x<<' '<<a3<<endl; else cout<<a1<<' '<<a2<<' '<<a3<<' '<<x<<endl; return 0; }
输入: 91 2 20 77
输出: _______
第24题
#include<iostream> using namespace std; int rSum(int j) { int sum = 0; while (j != 0) { sum = sum * 10 + (j % 10); j = j / 10; } return sum; } int main() { int n, m, i; cin>>n>>m; for (i = n; i < m; i++) if (i == rSum(i)) cout<<i<<' '; return 0; }
输入: 90 120
第25题
#include<iostream> #include<iostream> using namespace std; int main() { string s; char m1, m2; int i; getline(cin, s); m1 = ' '; m2 = ' '; for (i = 0; i < s.length(); i++) if (s[i] > m1) { m2 = m1; m1 = s[i]; } else if (s[i] > m2) m2 = s[i]; cout<<int(m1)<<' '<<int(m2)<<endl; return 0; }
输入: Expo 2010 Shanghai China
第26题
#include<iostream> using namespace std; const int NUM = 5; int r(int n) { int i; if (n <= NUM) return n; for (i = 1; i <= NUM; i++) if (r(n - i) < 0) return i; return -1; } int main() { int n; cin>>n; cout<<r(n)<<endl; return 0; }
(1) 输入: 7 输出: _______ (4 分)
(2) 输入: 16 输出: _______ (4 分)
第27题
(哥德巴赫猜想) 哥德巴赫猜想是指,任一大于 2 的偶数都可写成两个质数之和。迄今 为止, 这仍然是一个著名的世界难题,被誉为数学王冠上的明珠。 试编写程序,验证任一大 于 2 且不超过 n 的偶数都能写成两个质数之和。
#include<iostream> using namespace std; int main() { const int SIZE = 1000; int n, r, p[SIZE], i, j, k, ans; bool tmp; cin>>n; r = 1; p[1] = 2; for (i = 3; i <= n; i++) { ① _______; for (j = 1; j <= r; j++) if (i % ② ______) { tmp = false; break; } if (tmp) { r++; ③_________ } } ans = 0; for (i = 2; i <= n / 2; i++) { // i=n/2 表示缩小范围,排除重复情况。 tmp = false; for (j = 1; j <= r; j++) for (k = j; k <= r; k++) if (i + i == ④ _______ ) { tmp = true; break; } if (tmp) ans++; } cout<<ans<<endl; return 0; }若输入 n 为 2010 ,则输出 ⑤ _______ 时表示验证成功,即大于 2 且不超过 2010 的偶数都 满足哥德巴赫猜想。
第28题
(过河问题) 在一个月黑风高的夜晚,有一群人在河的右岸,想通过唯一的一根独木桥 走到河的左岸。 在这伸手不见五指的黑夜里, 过桥时必须借助灯光来照明, 很不幸的是,他 们只有一盏灯。 另外,独木桥上最多承受两个人同时经过,否则将会坍塌。 每个人单独过桥 都需要一定的时间,不同的人需要的时间可能不同。两个人一起过桥时,由于只有一盏灯,所以需要的时间是较慢的那个人单独过桥时所花的时间。现输入 n( 2≤n≤100)和这 n 个 人单独过桥时需要的时间,请计算总共最少需要多少时间,他们才能全部到达河的左岸。 例如,有 3 个人甲、乙、丙,他们单独过桥的时间分别为 1、 2、4,则总共最少需要 的时间为 7 。具体方法是:甲、乙一起过桥到河的左岸,甲单独回到河的右岸将灯带回,然 后甲、丙再一起过桥到河的左岸,总时间为 2+1+4=7 。
#include<iostream> using namespace std; const int SIZE = 100; const int INFINITY = 10000; const bool LEFT = true; const bool RIGHT = false; const bool LEFT_TO_RIGHT = true; const bool RIGHT_TO_LEFT = false; int n, hour[SIZE]; //存放每个人的过河时间 bool pos[SIZE]; int max(int a, int b) { if (a > b) return a; else return b; } int go(bool stage) { int i, j, num, tmp, ans; if (stage == RIGHT_TO_LEFT) { num = 0; ans = 0; for (i = 1; i <= n; i++) if (pos[i] == RIGHT) { num++; //人数加1 if (hour[i] > ans) ans = hour[i]; //ans保留了最长的过桥时间, } if ( ① __________ ) return ans; ans = INFINITY; for (i = 1; i <= n - 1; i++) if (pos[i] == RIGHT) //如果这个人在右侧 for (j = i + 1; j <= n; j++) if (pos[j] == RIGHT) { pos[i] = LEFT; pos[j] = LEFT; tmp = max(hour[i], hour[j]) + ② __________) ; if (tmp < ans) ans = tmp; pos[i] = RIGHT; pos[j] = RIGHT; } return ans; } if (stage == LEFT_TO_RIGHT) { ans = INFINITY; for (i = 1; i <= n; i++) if ( ③_________) { pos[i] = RIGHT; tmp = ④ _________; if (tmp < ans) ans = tmp; ⑤__________ ; } return ans; } return 0; } int main() { int i; cin>>n; for (i = 1; i <=n; i++) { cin>>hour[i]; pos[i] = RIGHT; //pos是记录每个元素所处的位置。 } cout<<go(RIGHT_TO_LEFT)<<endl; //初始状态RIGHT_TO_LEFT return 0; }
一、单项选择题 (1-20 共20题); 二、问题求解(21-22 共 2 题); 三、阅读程序写结果(23-26 共 4 题); 四、完善程序(27-28 共2题)。