一、單項選擇題(共20題,每題1.5分,共計30分;每題有且僅有一個正確選項)
1.在8位二進(jìn)制補(bǔ)碼中,10101011表示的數(shù)是十進(jìn)制下的( )。
A. 43 B. -85 C. -43 D. -84
2.計算機(jī)存儲數(shù)據(jù)的基本單位是( )。
A. bit B. Byte C. GB D. KB
3.下列協(xié)議中與電子郵件無關(guān)的是( )。
A. POP3 B. SMTP C. WTO D. IMAP
4.分辨率為800x600、16位色的位圖,存儲圖像信息所需的空間為( )。
A.937.5KB B. 4218.75KB
C.4320KB D. 2880KB
5.計算機(jī)應(yīng)用的最早領(lǐng)域是( )。
A.數(shù)值計算 B.人工智能
C.機(jī)器人 D.過程控制
6.下列不屬于面向?qū)ο蟪绦蛟O(shè)計語言的是( )。
A. C B. C++ C. Java D. C#
7.NOI的中文意思是( )。
A.中國信息學(xué)聯(lián)賽
B.全國青少年信息學(xué)奧林匹克競賽
C.中國青少年信息學(xué)奧林匹克競賽
D.中國計算機(jī)協(xié)會
8. 2017年10月1日是星期日,1999年10月1日是( )。
A.星期三 B.星期日
C.星期五 D.星期二
9.甲、乙、丙三位同學(xué)選修課程,從4門課程中,甲選修2門,乙、丙各選修3門,則不同的選修方案共有( )種。
A. 36 B. 48 C. 96 D. 192
10.設(shè)G是有n個結(jié)點(diǎn)、m條邊(n ≤m)的連通圖,必須刪去G的( )條邊,才能使得G變成一棵樹。
A.m–n+1 B. m-n
C. m+n+1 D.n–m+1
11.對于給定的序列{ak},我們把(i, j)稱為逆序?qū)Ξ?dāng)且僅當(dāng)i < j且ai> aj。那么
序列1, 7, 2, 3, 5, 4的逆序?qū)?shù)為()個。
A. 4 B. 5 C. 6 D. 7
12.表達(dá)式a * (b + c) * d的后綴形式是()。
A. abcd*+* B. abc+*d*
C. a*bc+*d D. b+c*a*d
13.向一個棧頂指針為hs的鏈?zhǔn)綏V胁迦胍粋€指針s指向的結(jié)點(diǎn)時,應(yīng)執(zhí)行( )。
A. hs->next=s;
B.s->next=hs;hs=s;
C.s->next=hs->next;hs->next=s;
D.s->next=hs;hs=hs->next;
14.若串S = “copyright”,其子串的個數(shù)是( )。
A. 72 B. 45 C. 46 D. 36
15.十進(jìn)制小數(shù)13.375對應(yīng)的二進(jìn)制數(shù)是( )。
A.1101.011 B. 1011.011
C.1101.101 D. 1010.01
16.對于入棧順序為a, b, c, d, e, f, g的序列,下列()不可能是合法的出棧序列。
A. a,b,c,d,e,f,g B. a,d,c,b,e,g,f
C. a,d,b,c,g,f,e D.g,f,e,d,c,b,a
17.設(shè)A和B是兩個長為n的有序數(shù)組,現(xiàn)在需要將A和B合并成一個排好序的數(shù)組,任何以元素比較作為基本運(yùn)算的歸并算法在最壞情況下至少要做( )次比較。
A. n2 B. nlogn C. 2n D. 2n-1
18.從()年開始,NOIP競賽將不再支持Pascal語言。
A. 2020 B. 2021 C. 2022 D. 2023
19.一家四口人,至少兩個人生日屬于同一月份的概率是()(假定每個人生日屬于每個月份的概率相同且不同人之間相互獨(dú)立)。
A. 1/12 B. 1/144 C. 41/96D. 3/4
20.以下和計算機(jī)領(lǐng)域密切相關(guān)的獎項是( )。
A.奧斯卡獎 B.圖靈獎
C.諾貝爾獎 D.普利策獎
二、問題求解(共2題,每題5分,共計10分)
1.一個人站在坐標(biāo)(0, 0)處,面朝x軸正方向。第一輪,他向前走1單位距離,然后右轉(zhuǎn);第二輪,他向前走2單位距離,然后右轉(zhuǎn);第三輪,他向前走3單位距離,然后右轉(zhuǎn)......他一直這么走下去。請問第2017輪后,他的坐標(biāo)是: (1009,1008)。(請在答題紙上用逗號隔開兩空答案)
2.如圖所示,共有13個格子。對任何一個格子進(jìn)行一次操作,會使得它自己以及與它上下左右相鄰的格子中的數(shù)字改變(由1變0,或由0變1)?,F(xiàn)在要使得所有的格子中的數(shù)字都變?yōu)?,至少需要3次操作。
三、閱讀程序?qū)懡Y(jié)果(共4題,每題8分,共計32分)
1.
#include
using namespacestd;
int main() {
int t[256];
string s;
int i;
cin >> s;
for (i = 0; i < 256; i++)
t[i] = 0;
for (i = 0; i < s.length(); i++)
t[s[i]]++;
for (i = 0; i < s.length(); i++)
if (t[s[i]] == 1) {
cout << s[i] << endl;
return 0;
}
cout << "no" << endl;
return 0;
}
輸入: xyzxyw
輸出:z
2.
#include
using namespacestd;
int g(int m, intn, int x) {
int ans = 0;
int i;
if (n == 1)
return 1;
for (i = x; i <= m / n; i++)
ans += g(m - i, n - 1, i);
return ans;
}
int main() {
int t, m, n;
cin >> m >> n;
cout << g(m, n, 0) << endl;
return 0;
}
輸入: 7 3
輸出:8
3.
#include
using namespacestd;
int main() {
string ch;
int a[200];
int b[200];
int n, i, t, res;
cin >> ch;
n = ch.length();
for (i = 0; i < 200; i++)
b[i] = 0;
for (i = 1; i <= n; i++) {
a[i] = ch[i - 1] - '0';
b[i] = b[i - 1] + a[i];
}
res = b[n];
t = 0;
for (i = n; i > 0; i--) {
if (a[i] == 0)
t++;
if (b[i - 1] + t < res)
res = b[i - 1] + t;
}
cout << res << endl;
return 0;
}
輸入: 1001101011001101101011110001
輸出:11
4.
#include
using namespacestd;
int main() {
int n, m;
cin >> n >> m;
int x = 1;
int y = 1;
int dx = 1;
int dy = 1;
int cnt = 0;
while (cnt != 2) {
cnt = 0;
x = x + dx;
y = y + dy;
if (x == 1 || x == n) {
++cnt;
dx = -dx;
}
if (y == 1 || y == m) {
++cnt;
dy = -dy;
}
}
cout << x << " " << y<< endl;
return 0;
}
輸入1: 4 3
輸出1:1 3(3分)
輸入2: 2017 1014
輸出2:2017 1(5分)
四、完善程序(共2題,每題14分,共計28分)
1.快速冪:請完善下面的程序,該程序使用分治法求xp mod m的值。(第一空2分,其余3分)
輸入:三個不超過10000的正整數(shù)x,p,m。
輸出:xpmod m的值。
提示:若p為偶數(shù),xp=(x2)p/2;若p為奇數(shù),xp=x*(x2)(p-1)/2。
#include
using namespacestd;
int x, p, m, i,result;
int main() {
cin >> x >> p >> m;
result =1;
while (p>0) {
if (p % 2 == 1)
result=result*x%m;
p /= 2;
x=x*x%m;
}
cout << result<< endl;
return 0;
}
2.切割繩子:有n條繩子,每條繩子的長度已知且均為正整數(shù)。繩子可以以任意正整數(shù)長度切割,但不可以連接?,F(xiàn)在要從這些繩子中切割出m條長度相同的繩段,求繩段的最大長度是多少。(第一、二空2.5分,其余3分)
輸入:第一行是一個不超過100的正整數(shù)n,第二行是n個不超過106的正整數(shù),表示每條繩子的長度,第三行是一個不超過108的正整數(shù)m。
輸出:繩段的最大長度,若無法切割,輸出Failed。
#include
using namespacestd;
int n, m, i,lbound, ubound, mid, count;
int len[100]; //繩子長度
int main() {
cin >> n;
count = 0;
for (i = 0; i < n; i++) {
cin >> len[i];
count+=len[i];
}
cin >> m;
if(count<m ){
cout << "Failed" <
return 0;
}
lbound = 1;
ubound = 1000000;
while (lbound<ubound){
mid =(lbound+ubound+1)/2;
count = 0;
for (i = 0; i < n; i++)
count+=len[i]/mid;
if (count < m)
ubound = mid - 1;
else
lbound = mid;
}
cout << lbound << endl;
return 0;
}
聲明:本文來源于網(wǎng)絡(luò),由自主選拔在線團(tuán)隊(微信公眾號:zizzsw)排版編輯,如有侵權(quán),請聯(lián)系刪除。