爱迪国际C++章节测试-程序设计综合应用

*
您的姓名:
*
1.
填空题
阅读程序写结果:
#include <iostream>
using namespace std;
int main()
{
int i, length1, length2;
string s1, s2;
s1 = "I have a dream.";
s2 = "I Have A Dream.";
length1 = s1.size();
length2 = s2.size();
for (i = 0; i < length1; i++)
if (s1[i] >= 'a' && s1[i] <= 'z')
s1[i] -= 'a' - 'A';
for (i = 0; i < length2; i++)
if (s2[i] >= 'a' && s2[i] <= 'z')
s2[i] -= 'a' - 'A';
if (s1 == s2)
cout << "=" << endl;
else if (s1 > s2)
cout << ">" << endl;
else
cout << "<" << endl;
return 0;
}
输出:_________

*
2.
选题
向一个栈顶指针为ℎs 的链式栈中插入一个指针s 指向的结点时,应执行( )。
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;
*
3.
填空题
阅读程序写结果:
#include<iostream>
using namespace std;
int g(int m, int n, 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
输出:_________
4.
填空题*
对于一个 1 到n 的排列P(即 1 到n 中每一个数在P 中出现了恰好一次),令q[i]为第i个位置之后第一个比P[i] 值更大的位置,如果不存在这样的位置,则q[i]=n+1。举例来说,如果n=5 且P 为 1 5 4 2 3 ,则q 为2 6 6 5 6。下列程序读入了排列P ,使用双向链表求解了答案。试补全程序。
#include <iostream>
using namespace std;
const int N = 100010;
int n;
int L[N], R[N], a[N];
int main() {
cin >> n;
for (int i = 1; i <= n; ++i) {
int x;
cin >> x;
① ;
}
for (int i = 1; i <= n; ++i) {
R[i] = ② ;
L[i] = i - 1;
}
for (int i = 1; i <= n; ++i) {
L[ ③ ] = L[a[i]];
R[L[a[i]]] = R[ ④ ];
}
for (int i = 1; i <= n; ++i) {
cout << ⑤ << " ";
}
cout << endl;
return 0;
}
①:②:③:④:⑤:
*
5.
判断题
1 #include <cstdio>
2 #include <cstring>
3 using namespace std;
4 char st[100];
5 int main() {
6 scanf("%s", st);
7 int n = strlen(st);
8 for (int i = 1; i <= n; ++i) {
9 if (n % i == 0) {
10 char c = st[i - 1];
11 if (c >= 'a')
12 st[i - 1] = c - 'a' + 'A';
13 }
14 }
15 printf("%s", st);
16 return 0;
17 }
   输入的字符串只能由小写字母或大写字母组成。()
*
6.
判断题

1 #include <cstdio>
2 #include <cstring>
3 using namespace std;
4 char st[100];
5 int main() {
6 scanf("%s", st);
7 int n = strlen(st);
8 for (int i = 1; i <= n; ++i) {
9 if (n % i == 0) {
10 char c = st[i - 1];
11 if (c >= 'a')
12 st[i - 1] = c - 'a' + 'A';
13 }
14 }
15 printf("%s", st);
16 return 0;
17 }
若将第8行的“i=1”改为“i=0”,程序运行时会发生错误。()
*
7.
判断题
1 #include <cstdio>
2 #include <cstring>
3 using namespace std;
4 char st[100];
5 int main() {
6 scanf("%s", st);
7 int n = strlen(st);
8 for (int i = 1; i <= n; ++i) {
9 if (n % i == 0) {
10 char c = st[i - 1];
11 if (c >= 'a')
12 st[i - 1] = c - 'a' + 'A';
13 }
14 }
15 printf("%s", st);
16 return 0;
17 }
若将第8行的“i<=n”改为“i∗i<=n”,程序运行结果不会改变。()
*
8.
判断题
1 #include <cstdio>
2 #include <cstring>
3 using namespace std;
4 char st[100];
5 int main() {
6 scanf("%s", st);
7 int n = strlen(st);
8 for (int i = 1; i <= n; ++i) {
9 if (n % i == 0) {
10 char c = st[i - 1];
11 if (c >= 'a')
12 st[i - 1] = c - 'a' + 'A';
13 }
14 }
15 printf("%s", st);
16 return 0;
17 }
若输入的字符串全部由大写字母组成,那么输出的字符串就跟输入的字符串一样。()

*
9.
单选题
1 #include <cstdio>
2 #include <cstring>
3 using namespace std;
4 char st[100];
5 int main() {
6 scanf("%s", st);
7 int n = strlen(st);
8 for (int i = 1; i <= n; ++i) {
9 if (n % i == 0) {
10 char c = st[i - 1];
11 if (c >= 'a')
12 st[i - 1] = c - 'a' + 'A';
13 }
14 }
15 printf("%s", st);
16 return 0;
17 }
若输入的字符串长度为18,那么输入的字符串跟输出的字符串相比,至多有()个字符不同。
A. 18
B. 6
C. 10
D. 1
*
10.
单选题
1 #include <cstdio>
2 #include <cstring>
3 using namespace std;
4 char st[100];
5 int main() {
6 scanf("%s", st);
7 int n = strlen(st);
8 for (int i = 1; i <= n; ++i) {
9 if (n % i == 0) {
10 char c = st[i - 1];
11 if (c >= 'a')
12 st[i - 1] = c - 'a' + 'A';
13 }
14 }
15 printf("%s", st);
16 return 0;
17 }
若输入的字符串长度为(),那么输入的字符串跟输出的字符串相比,至多有36个字符不同。
A. 36
B. 100000
C. 1
D. 128
*
11.
判断题
1 #include <iostream>
2 using namespace std;
3 const int maxn = 10000;
4 int n;
5 int a[maxn];
6 int b[maxn];
7 int f(int l, int r, int depth) {
8 if (l > r)
9 return 0;
10 int min = maxn, mink;
11 for (int i = l; i <= r; ++i) {
12 if (min > a[i]) {
13 min = a[i];
14 mink = i;
15 }
16 }
17 int lres = f(l, mink - 1, depth + 1);
18 int rres = f(mink + 1, r, depth + 1);
19 return lres + rres + depth * b[mink];
20 }
21 int main() {
22 cin >> n;
23 for (int i = 0; i < n; ++i)
24 cin >> a[i];
25 for (int i = 0; i < n; ++i)
26 cin >> b[i];
27 cout << f(0, n - 1, 1) << endl;
28 return 0;
29 }
如果a数组有重复的数字,则程序运行时会发生错误。()
*
12.
判断题
1 #include <iostream>
2 using namespace std;
3 const int maxn = 10000;
4 int n;
5 int a[maxn];
6 int b[maxn];
7 int f(int l, int r, int depth) {
8 if (l > r)
9 return 0;
10 int min = maxn, mink;
11 for (int i = l; i <= r; ++i) {
12 if (min > a[i]) {
13 min = a[i];
14 mink = i;
15 }
16 }
17 int lres = f(l, mink - 1, depth + 1);
18 int rres = f(mink + 1, r, depth + 1);
19 return lres + rres + depth * b[mink];
20 }
21 int main() {
22 cin >> n;
23 for (int i = 0; i < n; ++i)
24 cin >> a[i];
25 for (int i = 0; i < n; ++i)
26 cin >> b[i];
27 cout << f(0, n - 1, 1) << endl;
28 return 0;
29 }
如果b数组全为0,则输出为0。()
*
13.
单选题
1 #include <iostream>
2 using namespace std;
3 const int maxn = 10000;
4 int n;
5 int a[maxn];
6 int b[maxn];
7 int f(int l, int r, int depth) {
8 if (l > r)
9 return 0;
10 int min = maxn, mink;
11 for (int i = l; i <= r; ++i) {
12 if (min > a[i]) {
13 min = a[i];
14 mink = i;
15 }
16 }
17 int lres = f(l, mink - 1, depth + 1);
18 int rres = f(mink + 1, r, depth + 1);
19 return lres + rres + depth * b[mink];
20 }
21 int main() {
22 cin >> n;
23 for (int i = 0; i < n; ++i)
24 cin >> a[i];
25 for (int i = 0; i < n; ++i)
26 cin >> b[i];
27 cout << f(0, n - 1, 1) << endl;
28 return 0;
29 }
当n=100时,最坏情况下,与第12行的比较运算执行的次数最接近的是:()。
A. 5000
B. 600
C. 6
D. 100
*
14.
单选题
1 #include <iostream>
2 using namespace std;
3 const int maxn = 10000;
4 int n;
5 int a[maxn];
6 int b[maxn];
7 int f(int l, int r, int depth) {
8 if (l > r)
9 return 0;
10 int min = maxn, mink;
11 for (int i = l; i <= r; ++i) {
12 if (min > a[i]) {
13 min = a[i];
14 mink = i;
15 }
16 }
17 int lres = f(l, mink - 1, depth + 1);
18 int rres = f(mink + 1, r, depth + 1);
19 return lres + rres + depth * b[mink];
20 }
21 int main() {
22 cin >> n;
23 for (int i = 0; i < n; ++i)
24 cin >> a[i];
25 for (int i = 0; i < n; ++i)
26 cin >> b[i];
27 cout << f(0, n - 1, 1) << endl;
28 return 0;
29 }
当n=100时,最好情况下,与第12行的比较运算执行的次数最接近的是:()。
A. 100
B. 6
C. 5000
D. 600
*
15.
单选题
1 #include <iostream>
2 using namespace std;
3 const int maxn = 10000;
4 int n;
5 int a[maxn];
6 int b[maxn];
7 int f(int l, int r, int depth) {
8 if (l > r)
9 return 0;
10 int min = maxn, mink;
11 for (int i = l; i <= r; ++i) {
12 if (min > a[i]) {
13 min = a[i];
14 mink = i;
15 }
16 }
17 int lres = f(l, mink - 1, depth + 1);
18 int rres = f(mink + 1, r, depth + 1);
19 return lres + rres + depth * b[mink];
20 }
21 int main() {
22 cin >> n;
23 for (int i = 0; i < n; ++i)
24 cin >> a[i];
25 for (int i = 0; i < n; ++i)
26 cin >> b[i];
27 cout << f(0, n - 1, 1) << endl;
28 return 0;
29 }
当n=10时,若b数组满足,对任意0<=i<n,都有b[i]=i+1,那么输出最大为()。
A. 386
B. 383
C. 384
D. 385
*
16.
单选题
1 #include <iostream>
2 using namespace std;
3 const int maxn = 10000;
4 int n;
5 int a[maxn];
6 int b[maxn];
7 int f(int l, int r, int depth) {
8 if (l > r)
9 return 0;
10 int min = maxn, mink;
11 for (int i = l; i <= r; ++i) {
12 if (min > a[i]) {
13 min = a[i];
14 mink = i;
15 }
16 }
17 int lres = f(l, mink - 1, depth + 1);
18 int rres = f(mink + 1, r, depth + 1);
19 return lres + rres + depth * b[mink];
20 }
21 int main() {
22 cin >> n;
23 for (int i = 0; i < n; ++i)
24 cin >> a[i];
25 for (int i = 0; i < n; ++i)
26 cin >> b[i];
27 cout << f(0, n - 1, 1) << endl;
28 return 0;
29 }
当n=100时,若b数组满足,对任意0<=i<n,都有b[i]=1,那么输出最小为()。
A. 582
B. 580
C. 579
D. 581
*
17.
单选题
(矩阵变幻)有一个奇幻的矩阵,在不停的变幻,其变幻方式为:数字 0 变成矩阵

数字 1 变成矩阵

最初该矩阵只有一个元素 0,变幻n 次后,矩阵会变成什么样?
例如,矩阵最初为:[0];矩阵变幻 1 次后:

矩阵变幻 2 次后:

输入一行一个不超过 10 的正整数n。输出变幻n 次后的矩阵。试补全程序。提示:<<<< 表示二进制左移运算符,例如(11)2<<2=(1100)2
而 ^ 表示二进制异或运算符,它将两个参与运算的数中的每个对应的二进制位进行比较,若两个二进制位相同,则运算结果的对应二进制位为 0 ,反之为 1。
1 #include <cstdio>
2 using namespace std;
3 int n;
4 const int max_size = 1 << 10;
5
6 int res[max_size][max_size];
7
8 void recursive(int x, int y, int n, int t) {
9 if (n == 0) {
10 res[x][y] = ①;
11 return;
12 }
13 int step = 1 << (n - 1);
14 recursive(②, n - 1, t);
15 recursive(x, y + step, n - 1, t);
16 recursive(x + step, y, n - 1, t);
17 recursive(③, n - 1, !t);
18 }
19
20 int main() {
21 scanf("%d", &n);
22 recursive(0, 0, ④);
23 int size = ⑤;
24 for (int i = 0; i < size; i++) {
25 for (int j = 0; j < size; j++)
26 printf("%d", res[i][j]);
27 puts("");
28 }
29 return 0;
30 }
①处应填()
A. n%2
B. 0
C. t
D. 1
*
18.
单选题
(矩阵变幻)有一个奇幻的矩阵,在不停的变幻,其变幻方式为:数字 0 变成矩阵

数字 1 变成矩阵

最初该矩阵只有一个元素 0,变幻n 次后,矩阵会变成什么样?
例如,矩阵最初为:[0];矩阵变幻 1 次后:

矩阵变幻 2 次后:

输入一行一个不超过 10 的正整数n。输出变幻n 次后的矩阵。试补全程序。提示:<<<< 表示二进制左移运算符,例如(11)2<<2=(1100)2
而 ^ 表示二进制异或运算符,它将两个参与运算的数中的每个对应的二进制位进行比较,若两个二进制位相同,则运算结果的对应二进制位为 0 ,反之为 1。
1 #include <cstdio>
2 using namespace std;
3 int n;
4 const int max_size = 1 << 10;
5
6 int res[max_size][max_size];
7
8 void recursive(int x, int y, int n, int t) {
9 if (n == 0) {
10 res[x][y] = ①;
11 return;
12 }
13 int step = 1 << (n - 1);
14 recursive(②, n - 1, t);
15 recursive(x, y + step, n - 1, t);
16 recursive(x + step, y, n - 1, t);
17 recursive(③, n - 1, !t);
18 }
19
20 int main() {
21 scanf("%d", &n);
22 recursive(0, 0, ④);
23 int size = ⑤;
24 for (int i = 0; i < size; i++) {
25 for (int j = 0; j < size; j++)
26 printf("%d", res[i][j]);
27 puts("");
28 }
29 return 0;
30 }

②处应填()
A. x-step,y-step
B. x,y-step
C. x-step,y
D. x,y
*
19.
单选题
(矩阵变幻)有一个奇幻的矩阵,在不停的变幻,其变幻方式为:
数字 0 变成矩阵

数字 1 变成矩阵

最初该矩阵只有一个元素 0,变幻n 次后,矩阵会变成什么样?
例如,矩阵最初为:[0];
矩阵变幻 1 次后:

矩阵变幻 2 次后:

输入一行一个不超过 10 的正整数n。输出变幻n 次后的矩阵。试补全程序。提示:<<<< 表示二进制左移运算符,例如(11)2<<2=(1100)2
而 ^ 表示二进制异或运算符,它将两个参与运算的数中的每个对应的二进制位进行比较,若两个二进制位相同,则运算结果的对应二进制位为 0 ,反之为 1。
1 #include <cstdio>
2 using namespace std;
3 int n;
4 const int max_size = 1 << 10;
5
6 int res[max_size][max_size];
7
8 void recursive(int x, int y, int n, int t) {
9 if (n == 0) {
10 res[x][y] = ①;
11 return;
12 }
13 int step = 1 << (n - 1);
14 recursive(②, n - 1, t);
15 recursive(x, y + step, n - 1, t);
16 recursive(x + step, y, n - 1, t);
17 recursive(③, n - 1, !t);
18 }
19
20 int main() {
21 scanf("%d", &n);
22 recursive(0, 0, ④);
23 int size = ⑤;
24 for (int i = 0; i < size; i++) {
25 for (int j = 0; j < size; j++)
26 printf("%d", res[i][j]);
27 puts("");
28 }
29 return 0;
30 }
 ③处应填()
A. x-step,y-step
B. x+step,y+step
C. x-step,y
D. x,y-step
*
20.
单选题
(矩阵变幻)有一个奇幻的矩阵,在不停的变幻,其变幻方式为:
数字 0 变成矩阵

数字 1 变成矩阵

最初该矩阵只有一个元素 0,变幻n 次后,矩阵会变成什么样?
例如,矩阵最初为:[0];
矩阵变幻 1 次后:

矩阵变幻 2 次后:

输入一行一个不超过 10 的正整数n。输出变幻n 次后的矩阵。试补全程序。提示:<<<< 表示二进制左移运算符,例如(11)2<<2=(1100)2
而 ^ 表示二进制异或运算符,它将两个参与运算的数中的每个对应的二进制位进行比较,若两个二进制位相同,则运算结果的对应二进制位为 0 ,反之为 1。
1 #include <cstdio>
2 using namespace std;
3 int n;
4 const int max_size = 1 << 10;
5
6 int res[max_size][max_size];
7
8 void recursive(int x, int y, int n, int t) {
9 if (n == 0) {
10 res[x][y] = ①;
11 return;
12 }
13 int step = 1 << (n - 1);
14 recursive(②, n - 1, t);
15 recursive(x, y + step, n - 1, t);
16 recursive(x + step, y, n - 1, t);
17 recursive(③, n - 1, !t);
18 }
19
20 int main() {
21 scanf("%d", &n);
22 recursive(0, 0, ④);
23 int size = ⑤;
24 for (int i = 0; i < size; i++) {
25 for (int j = 0; j < size; j++)
26 printf("%d", res[i][j]);
27 puts("");
28 }
29 return 0;
30 }
 ④处应填()
A. n-1,n%2
B. n,0
C. n,n%2
D. n-1,0
*
21.
单选题
(矩阵变幻)有一个奇幻的矩阵,在不停的变幻,其变幻方式为:
数字 0 变成矩阵

数字 1 变成矩阵

最初该矩阵只有一个元素 0,变幻n 次后,矩阵会变成什么样?
例如,矩阵最初为:[0];
矩阵变幻 1 次后:

矩阵变幻 2 次后:

输入一行一个不超过 10 的正整数n。输出变幻n 次后的矩阵。试补全程序。提示:<<<< 表示二进制左移运算符,例如(11)2<<2=(1100)2
而 ^ 表示二进制异或运算符,它将两个参与运算的数中的每个对应的二进制位进行比较,若两个二进制位相同,则运算结果的对应二进制位为 0 ,反之为 1。
1 #include <cstdio>
2 using namespace std;
3 int n;
4 const int max_size = 1 << 10;
5
6 int res[max_size][max_size];
7
8 void recursive(int x, int y, int n, int t) {
9 if (n == 0) {
10 res[x][y] = ①;
11 return;
12 }
13 int step = 1 << (n - 1);
14 recursive(②, n - 1, t);
15 recursive(x, y + step, n - 1, t);
16 recursive(x + step, y, n - 1, t);
17 recursive(③, n - 1, !t);
18 }
19
20 int main() {
21 scanf("%d", &n);
22 recursive(0, 0, ④);
23 int size = ⑤;
24 for (int i = 0; i < size; i++) {
25 for (int j = 0; j < size; j++)
26 printf("%d", res[i][j]);
27 puts("");
28 }
29 return 0;
30 }
 ⑤处应填()


A. 1<<(n+1)
B. 1<<n
C. n+1
D. 1<<(n-1)
*
22.
判断题
1 #include <stdio.h>
2
3 int n;
4 int a[1000];
5
6 int f(int x)
7 {
8 int ret = 0;
9 for (; x; x &= x - 1) ret++;
10 return ret;
11 }
12
13 int g(int x)
14 {
15 return x & -x;
16 }
17
18 int main()
19 {
20 scanf("%d", &n);
21 for (int i = 0; i < n; i++) scanf("%d", &a[i]);
22 for (int i = 0; i < n; i++)
23 printf("%d ", f(a[i]) + g(a[i]));
24 printf("\n");
25 return 0;
26 }
27
输入的n等于1001时,程序不会发生下标越界。()
*
23.
判断题
1 #include <stdio.h>
2
3 int n;
4 int a[1000];
5
6 int f(int x)
7 {
8 int ret = 0;
9 for (; x; x &= x - 1) ret++;
10 return ret;
11 }
12
13 int g(int x)
14 {
15 return x & -x;
16 }
17
18 int main()
19 {
20 scanf("%d", &n);
21 for (int i = 0; i < n; i++) scanf("%d", &a[i]);
22 for (int i = 0; i < n; i++)
23 printf("%d ", f(a[i]) + g(a[i]));
24 printf("\n");
25 return 0;
26 }
27
输入的a[i] 必须全为正整数,否则程序将陷入死循环。()
*
24.
判断题
1 #include <stdio.h>
2
3 int n;
4 int a[1000];
5
6 int f(int x)
7 {
8 int ret = 0;
9 for (; x; x &= x - 1) ret++;
10 return ret;
11 }
12
13 int g(int x)
14 {
15 return x & -x;
16 }
17
18 int main()
19 {
20 scanf("%d", &n);
21 for (int i = 0; i < n; i++) scanf("%d", &a[i]);
22 for (int i = 0; i < n; i++)
23 printf("%d ", f(a[i]) + g(a[i]));
24 printf("\n");
25 return 0;
26 }
27
当输入为”5 2 11 9 16 10”时,输出为”3 4 3 17 5”。()
*
25.
判断题
1 #include <stdio.h>
2
3 int n;
4 int a[1000];
5
6 int f(int x)
7 {
8 int ret = 0;
9 for (; x; x &= x - 1) ret++;
10 return ret;
11 }
12
13 int g(int x)
14 {
15 return x & -x;
16 }
17
18 int main()
19 {
20 scanf("%d", &n);
21 for (int i = 0; i < n; i++) scanf("%d", &a[i]);
22 for (int i = 0; i < n; i++)
23 printf("%d ", f(a[i]) + g(a[i]));
24 printf("\n");
25 return 0;
26 }
27
当输入为”1 511998”时,输出为”18” 。()
*
26.
判断题
1 #include <stdio.h>
2
3 int n;
4 int a[1000];
5
6 int f(int x)
7 {
8 int ret = 0;
9 for (; x; x &= x - 1) ret++;
10 return ret;
11 }
12
13 int g(int x)
14 {
15 return x & -x;
16 }
17
18 int main()
19 {
20 scanf("%d", &n);
21 for (int i = 0; i < n; i++) scanf("%d", &a[i]);
22 for (int i = 0; i < n; i++)
23 printf("%d ", f(a[i]) + g(a[i]));
24 printf("\n");
25 return 0;
26 }
27
将源代码中g函数的定义(13-16行)移到main函数的后面,程序可以正常编译运行。()
*
27.
单选题
1 #include <stdio.h>
2
3 int n;
4 int a[1000];
5
6 int f(int x)
7 {
8 int ret = 0;
9 for (; x; x &= x - 1) ret++;
10 return ret;
11 }
12
13 int g(int x)
14 {
15 return x & -x;
16 }
17
18 int main()
19 {
20 scanf("%d", &n);
21 for (int i = 0; i < n; i++) scanf("%d", &a[i]);
22 for (int i = 0; i < n; i++)
23 printf("%d ", f(a[i]) + g(a[i]));
24 printf("\n");
25 return 0;
26 }
27
当输入为”2 -65536 2147483647”时,输出为()
A."65532 33"
B."65552 32"
C."65535 34"
D."65554 33"
*
28.
判断题
1 #include <stdio.h>
2 #include <string.h>
3
4 char base[64];
5 char table[256];
6 char str[256];
7 char ans[256];
8
9 void init()
10 {
11 for (int i = 0; i < 26; i++) base[i] = 'A' + i;
12 for (int i = 0; i < 26; i++) base[26 + i] = 'a' + i;
13 for (int i = 0; i < 10; i++) base[52 + i] = '0' + i;
14 base[62] = '+', base[63] = '/';
15
16 for (int i = 0; i < 256; i++) table[i] = 0xff;
17 for (int i = 0; i < 64; i++) table[base[i]] = i;
18 table['='] = 0;
19 }
20
21 void decode(char *str)
22 {
23 char *ret = ans;
24 int i, len = strlen(str);
25 for (i = 0; i < len; i += 4) {
26 (*ret++) = table[str[i]] << 2 | table[str[i + 1]] >> 4;
27 if (str[i + 2] != '=')
28 (*ret++) = (table[str[i + 1]] & 0x0f) << 4 | table[str[i + 2]] >> 2;
29 if(str[i + 3] != '=')
30 (*ret++) = table[str[i + 2]] << 6 | table[str[i + 3]];
31 }
32 }
33
34 int main()
35 {
36 init();
37 printf("%d\n", (int)table[0]);
38
39 scanf("%s", str);
40 decode(str);
41 printf("%s\n", ans);
42 return 0;
43 }
输出的第二行一定是由小写字母、大写字母、数字和”+”、”/”、”=”构成的字符串。()
*
29.
判断题
1 #include <stdio.h>
2 #include <string.h>
3
4 char base[64];
5 char table[256];
6 char str[256];
7 char ans[256];
8
9 void init()
10 {
11 for (int i = 0; i < 26; i++) base[i] = 'A' + i;
12 for (int i = 0; i < 26; i++) base[26 + i] = 'a' + i;
13 for (int i = 0; i < 10; i++) base[52 + i] = '0' + i;
14 base[62] = '+', base[63] = '/';
15
16 for (int i = 0; i < 256; i++) table[i] = 0xff;
17 for (int i = 0; i < 64; i++) table[base[i]] = i;
18 table['='] = 0;
19 }
20
21 void decode(char *str)
22 {
23 char *ret = ans;
24 int i, len = strlen(str);
25 for (i = 0; i < len; i += 4) {
26 (*ret++) = table[str[i]] << 2 | table[str[i + 1]] >> 4;
27 if (str[i + 2] != '=')
28 (*ret++) = (table[str[i + 1]] & 0x0f) << 4 | table[str[i + 2]] >> 2;
29 if(str[i + 3] != '=')
30 (*ret++) = table[str[i + 2]] << 6 | table[str[i + 3]];
31 }
32 }
33
34 int main()
35 {
36 init();
37 printf("%d\n", (int)table[0]);
38
39 scanf("%s", str);
40 decode(str);
41 printf("%s\n", ans);
42 return 0;
43 }
可能存在输入不同,但输出的第二行相同的情形。()
*
30.
判断题
1 #include <stdio.h>
2 #include <string.h>
3
4 char base[64];
5 char table[256];
6 char str[256];
7 char ans[256];
8
9 void init()
10 {
11 for (int i = 0; i < 26; i++) base[i] = 'A' + i;
12 for (int i = 0; i < 26; i++) base[26 + i] = 'a' + i;
13 for (int i = 0; i < 10; i++) base[52 + i] = '0' + i;
14 base[62] = '+', base[63] = '/';
15
16 for (int i = 0; i < 256; i++) table[i] = 0xff;
17 for (int i = 0; i < 64; i++) table[base[i]] = i;
18 table['='] = 0;
19 }
20
21 void decode(char *str)
22 {
23 char *ret = ans;
24 int i, len = strlen(str);
25 for (i = 0; i < len; i += 4) {
26 (*ret++) = table[str[i]] << 2 | table[str[i + 1]] >> 4;
27 if (str[i + 2] != '=')
28 (*ret++) = (table[str[i + 1]] & 0x0f) << 4 | table[str[i + 2]] >> 2;
29 if(str[i + 3] != '=')
30 (*ret++) = table[str[i + 2]] << 6 | table[str[i + 3]];
31 }
32 }
33
34 int main()
35 {
36 init();
37 printf("%d\n", (int)table[0]);
38
39 scanf("%s", str);
40 decode(str);
41 printf("%s\n", ans);
42 return 0;
43 }
输出的第一行为”-1”。()
*
31.
单选题
1 #include <stdio.h>
2 #include <string.h>
3
4 char base[64];
5 char table[256];
6 char str[256];
7 char ans[256];
8
9 void init()
10 {
11 for (int i = 0; i < 26; i++) base[i] = 'A' + i;
12 for (int i = 0; i < 26; i++) base[26 + i] = 'a' + i;
13 for (int i = 0; i < 10; i++) base[52 + i] = '0' + i;
14 base[62] = '+', base[63] = '/';
15
16 for (int i = 0; i < 256; i++) table[i] = 0xff;
17 for (int i = 0; i < 64; i++) table[base[i]] = i;
18 table['='] = 0;
19 }
20
21 void decode(char *str)
22 {
23 char *ret = ans;
24 int i, len = strlen(str);
25 for (i = 0; i < len; i += 4) {
26 (*ret++) = table[str[i]] << 2 | table[str[i + 1]] >> 4;
27 if (str[i + 2] != '=')
28 (*ret++) = (table[str[i + 1]] & 0x0f) << 4 | table[str[i + 2]] >> 2;
29 if(str[i + 3] != '=')
30 (*ret++) = table[str[i + 2]] << 6 | table[str[i + 3]];
31 }
32 }
33
34 int main()
35 {
36 init();
37 printf("%d\n", (int)table[0]);
38
39 scanf("%s", str);
40 decode(str);
41 printf("%s\n", ans);
42 return 0;
43 }
设输入字符串长度为n,decode函数的时间复杂度为()
A.O(√n)
B.O(n)
C.O(nlogn)
D.O(n 2 )
*
32.
单选题
1 #include <stdio.h>
2 #include <string.h>
3
4 char base[64];
5 char table[256];
6 char str[256];
7 char ans[256];
8
9 void init()
10 {
11 for (int i = 0; i < 26; i++) base[i] = 'A' + i;
12 for (int i = 0; i < 26; i++) base[26 + i] = 'a' + i;
13 for (int i = 0; i < 10; i++) base[52 + i] = '0' + i;
14 base[62] = '+', base[63] = '/';
15
16 for (int i = 0; i < 256; i++) table[i] = 0xff;
17 for (int i = 0; i < 64; i++) table[base[i]] = i;
18 table['='] = 0;
19 }
20
21 void decode(char *str)
22 {
23 char *ret = ans;
24 int i, len = strlen(str);
25 for (i = 0; i < len; i += 4) {
26 (*ret++) = table[str[i]] << 2 | table[str[i + 1]] >> 4;
27 if (str[i + 2] != '=')
28 (*ret++) = (table[str[i + 1]] & 0x0f) << 4 | table[str[i + 2]] >> 2;
29 if(str[i + 3] != '=')
30 (*ret++) = table[str[i + 2]] << 6 | table[str[i + 3]];
31 }
32 }
33
34 int main()
35 {
36 init();
37 printf("%d\n", (int)table[0]);
38
39 scanf("%s", str);
40 decode(str);
41 printf("%s\n", ans);
42 return 0;
43 }
当输入为”Y3Nx”时,输出的第二行为()
A.”csp”
B.“csq”
C.”CSP”
D.“Csp”
*
33.
单选题
1 #include <stdio.h>
2 #include <string.h>
3
4 char base[64];
5 char table[256];
6 char str[256];
7 char ans[256];
8
9 void init()
10 {
11 for (int i = 0; i < 26; i++) base[i] = 'A' + i;
12 for (int i = 0; i < 26; i++) base[26 + i] = 'a' + i;
13 for (int i = 0; i < 10; i++) base[52 + i] = '0' + i;
14 base[62] = '+', base[63] = '/';
15
16 for (int i = 0; i < 256; i++) table[i] = 0xff;
17 for (int i = 0; i < 64; i++) table[base[i]] = i;
18 table['='] = 0;
19 }
20
21 void decode(char *str)
22 {
23 char *ret = ans;
24 int i, len = strlen(str);
25 for (i = 0; i < len; i += 4) {
26 (*ret++) = table[str[i]] << 2 | table[str[i + 1]] >> 4;
27 if (str[i + 2] != '=')
28 (*ret++) = (table[str[i + 1]] & 0x0f) << 4 | table[str[i + 2]] >> 2;
29 if(str[i + 3] != '=')
30 (*ret++) = table[str[i + 2]] << 6 | table[str[i + 3]];
31 }
32 }
33
34 int main()
35 {
36 init();
37 printf("%d\n", (int)table[0]);
38
39 scanf("%s", str);
40 decode(str);
41 printf("%s\n", ans);
42 return 0;
43 }
当输入为”Y2NmIDIwMjE=”时,输出的第二行为()
A.”ccf2021”
B.”ccf2022”
C.”ccf 2021”
D.”ccf 2022”
问卷星提供技术支持
举报