#J0010. CSP-J2025 初赛模拟卷10

CSP-J2025 初赛模拟卷10

CSP-J 2025初赛模拟卷 10

一、单项选择题(共 15 题,每题 2 分,共计 30 分)

第 1 题 以下扩展名结尾的文件,不是多媒体文件的是( )。
{{ select(1) }}

  • mp3
  • txt
  • avi
  • jpg

第 2 题 以下关于链表和数组的描述中,错误的是( )。
{{ select(2) }}

  • 数组和链表都可以排序
  • 数组中查询元素的效率比较高
  • 链表中插入和删除元素的效率比较高
  • 向量和静态数组一样,不能动态调整数组大小

第 3 题 与 C++ 语言中的 cout using namespace std; const int N = 2e4 + 5, inf = 2e9 + 7; int n, a[N], ans = inf; int main() { scanf("%d", &n); for (int i = 1; i 改成 ``,程序仍能正常运行。( )
{{ select(18) }}

选择题
19. 若输入 41367,则输出为( )。
{{ select(19) }}

  • 0
  • 1
  • 2
  • 3
  1. (4分) 若输入 728915171816,则输出为( )。
    {{ select(20) }}
  • 2
  • 3
  • 4
  • 5

(2)

#include 
using namespace std;
int n, m, k, l, r, mid;
bool check(int g) {
    int st = 1, ed = m, cnt = 0;
    while (st = 1) {
        if (st * ed > g)
            ed--;
        else {
            cnt += ed;
            st++;
        }
    }
    return cnt >= k;
}
int main() {
    scanf("%d%d%d", &n, &m, &k);
    l = 1, r = n * m;
    while (l 
using namespace std;
const int N = 10;
int dx[10] = {0, 1, 0, -1}, dy[10] = {1, 0, -1, 0};
int n, m, ans;
char c[N][N];
void dfs(int x) {
    if (!x)
        return ++ans, void();
    vector v;
    v.clear();
    for (int i = 1; i = 1 && tx = 1 && ty 
using namespace std;
const int N = 2e5 + 5;
bool book[N];
char s1[N], s2[N];
vector num;
int n = 1, len1, len2, ans, operation[N];
bool check(int x) {
    num.clear();
    for (int i = x + 1; i  r`  
-  `l == r`  
-  `l >= r`  
-  `l != r`  

37. ⑤处应填( )。  
{{ select(37) }}  
-  `scanf("%d", &operation[n])`  
-  `~scanf("%d", &operation[n])`  
-  `!(cin >> operation[n])`  
-  `!scanf("%d", &operation[n])`  

### (2) 题目描述  
如果存在一个长度为 n 的排列(即该排列由 1, 2, 3, ..., n 这 n 个数字各出现一次组成),对于所有满足 2 ≤ i ≤ n - 1 的整数 i,都有 `a[i-1] ≤ a[i] ≤ a[i+1]` 或者 `a[i-1] ≥ a[i] ≥ a[i+1]` 成立,则称这个序列为一个山峰山谷序列。对所有长度为 n 的山峰山谷序列排序,求字典序第 k 大的排列。

```cpp
#include 
using namespace std;
const int N = 15;
int n, k, dp[N][N][2], ans[N], vis[N];
int main() {
    scanf("%d%d", &n, &k);
    dp[1][1][0] = dp[1][1][1] = 1;
    dp[2][1][0] = dp[2][2][1] = 1;
    for (int i = 2; i = 2 && ans[i - 2] = k) {
                    las = j;
                    break;
                }
                k -= x;
            }
        int cnt = 0;
        for (int k = 1; k <= las; ++k)
            if (!vis[k])
                cnt++;
        ④;
        ans[i] = las, vis[las] = 1;
    }
    for (int i = 1; i <= n; ++i)
        printf("%d ", ans[i]);
    return 0;
}
  1. ①处应填( )。
    {{ select(38) }}
  • j < k
  • j <= k
  • i < k
  • i <= k
  1. ②处应填( )。
    {{ select(39) }}
  • dp[i + 1][k][1] += dp[i][j][0]
  • dp[i + 1][k][0] += dp[i][j][1]
  • dp[i + 1][j][1] += dp[i][k][0]
  • dp[i + 1][j][0] += dp[i][k][1]
  1. ③处应填( )。
    {{ select(40) }}
  • ans[i - 1] + 1
  • ans[i - 2] + 1
  • i + 1
  • ans[i - 1]
  1. ④处应填( )。
    {{ select(41) }}
  • dp[n - i + 1][cnt][ans[i - 1]]
  • dp[n - i + 1][cnt][ans[i - 1]]
  • dp[n - i + 1][j - cnt][ans[i - 1]]
  • dp[n - i + 1][j - cnt][ans[i - 1]]
  1. ⑤处应填( )。
    {{ select(42) }}
  • k -= x
  • k -= x * (n - i + 1)
  • k -= x * cnt
  • k -= x * mk