共48道题,当前是第35

初赛真题

01 #include<bits/stdc++.h>
02 using namespace std;
03 const int maxn = 50;
04 void getnext(char str[]) {
05     int l = strlen(str), i, j, k, temp;
06     k = l - 2;
07     while (k - 1 >= 0 && str[k] > str[k + 1]) k--;
08     i = k + 1;
09     while (i < l && str[i] > str[k]) i++;
10     temp = str[k];
11     str[k] = str[i - 1];
12     str[i - 1] = temp;
13     for (i = l - 1; i > k; i--)
14         for (j = k + 1; j < i; j++)
15             if (str[j] > str[j + 1]) {
16                 temp = str[j];
17                 str[j] = str[j + 1];
18                 str[j + 1] = temp;
19             }
20     return;
21 }
22 int main() {
23     char a[maxn];
24     int n;
25     cin >> a >> n;
26     while (n > 0) {
27         getnext(a);
28         n--;
29     }
30     cout << a << endl;
31     return 0;
32 }

1. B。
2. B。
3. B。
4. A。
5. C。
6. A。

这份代码是对一个给定字符串应用 次字符串变换。对于这一道题我们可以按照代码进行模拟。代码首先前两个 while 循环与找下一个排列的操作类似,首先找到第一个顺序的数对,确定为 k ,然后从后方找到连续字符中最后一个大于该数字的数字,将两者交换。接下来对从 k 往后的数字进行冒泡排序,排序结束后就完成了对该字符串的变换。

Question

1. 若输入的字符串 a 是升序的,那么无论 n 为多少,第 13 行的循环都不会执行(执行的条件不满足)。( )

2. 若输入的 n 等于 2 ,对于第 27 行,第一次执行完和第二次执行完的字符串最多只有 2 个字符位置不同。( )

3. 程序执行完第 7 行时,第 k + 1 个字符到第 l - 1

4. 程序执行完第 12 行时,第 k + 1 个字符到第 l - 1 个字符的值是不严格递减的。( )

5. 若输入的字符串有 x 个字符并且是严格降序的,输入的 n 等于 1 ,则第 16 ~ 18 行会执行( )次

6. 若输入的字符串有 x 个字符并且都相同,输入的 n 等于 1 ,则第 16 ~ 18 行会执行( )次