二、閱讀程序(程序輸入不超過數組或字符串定義的范圍;判斷題正確填√,錯誤填×;除特殊說明外,判斷題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”,程序運行時會發
生錯誤。
3.若將第8行的“i <= n”改為“i * i <= n”,程序運
行結果不會改變。
4.若輸入的字符串全部由大寫字母組成,那么輸出的字符串就跟輸入的字符串一樣。
- 選擇題
5.若輸入的字符串長度為18,那么輸入的字符串跟輸出的字符串相比,至多有()個字符不同。
A.18 B.6 C.10 D.1
- 6.若輸入的字符串長度為(),那么輸入的字符串跟輸
出的字符串相比,至多有36個字符不同。
A.36 B.$10^5$ C.1 D.128
【答案】
判斷題:×√×√
選擇題:BB
- 【答案】
判斷題:√×××
選擇題:AA
【解析】
判斷題:
4.15行是否執行要看14行,與13行無關。
選擇題:
1.原來是2n,有m對數被減掉,即2n-2m。
2.只存兩個數,即2n-2。
#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。
2.執行完第27行的"++ans"時,ans —定是偶數。
3.a[i]和b[i]不可能同時大於0。
4.右程序執行到第13行時,x總是小於y,那么第15行不會被
執行。
- 選擇題
5.若m個x兩兩不同,且m個y兩兩不同,則輸出的值為()。
A. 2n-2m B. 2n+2 C. 2n-2 D. 2n
6.若m個x兩兩不同,且m個y都相等,則輸出的值為()。
A. 2n-2 B. 2n C. 2m D. 2n-2m
【答案】
判斷題:×√
選擇題:B
【解析】
判斷題:
1.當a數組數字重復時,取的是最小值中編號靠前的那個,並不會出錯。
2.f的返回函數永遠是0。
#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。()
•選擇題
3.當n=100時,最壞情況下,與第12行的比較運算執行的次
數最接近的是:()。
A. 5000 B. 600 C. 6 D. 100
4.當n=100時,最好情況下,與第12行的比較運算執行的次
數最接近的是:()。
A. 100 B. 6 C. 5000 D. 600
5.當n=10時,若b數組滿足,對任意0<=i<n,都有b[i] =
i + 1,那么輸出最大為()。
A. 386 B. 383 C. 384 D. 385
6.(4分)當n=100時,若b數組滿足,對任意0 S i < 71,
都有b[i]=1,那么輸出最小為()。
A. 582 B. 580 C. 579 D. 581
【答案】
判斷題:×√
選擇題:ADDB