#177. CSP-J 2026 初赛模拟卷 4

0

CSP-J 2026 初赛模拟卷 4

CSP-J 2026 初赛模拟卷 4 一、单项选择题(共15题,每题2分,共计30分;每题有且仅有一个正确选项) 在NOI Linux的终端中,要列出当前目录下所有文件和文件夹的详细信息(包括权限、大小、修改时间等),应该使用命令( )。 {{ select(1) }}

1s

1s-1

1s-a

1s-s

在计算机网络中,IP地址192.168.1.1属于( )地址。 {{ select(2) }}

A类

B类

C类

D类

在 C++ 中,表达式“!(5>3) && (4<=4) || (2!=2)”的结果是( )。 {{ select(3) }}

true

false

1

编译错误

关于单向链表,以下描述中正确的是( )。 {{ select(4) }}

可以随机访问任意位置的元素

插入和删除元素的时间复杂度都是 O ( 1 ) O(1)

需要连续的存储空间

每个节点包含数据和指向下一个节点的指针

对于有 n n 个节点的二叉树,其最小高度是( )。 {{ select(5) }}

⌈ log ⁡ 2 n ⌉ ⌈log 2 ​ n⌉

⌈ log ⁡ 2 ( n + 1 ) ⌉ − 1 ⌈log 2 ​ (n+1)⌉−1

n − 1 n−1

1

将十进制小数100.25转换为二进制数,结果是( )。 {{ select(6) }}

1010100.01

1100100.11

1100100.01

1010100.11

(考试成绩排序)场景:老师需要对全班50名学生的成绩排序,要求相同分数的学生保持原来的相对顺序。下列排序算法中最合适的是( )。 {{ select(7) }}

快速排序

堆排序

归并排序

选择排序

突然断电后,数据不会丢失的存储设备是( )。 {{ select(8) }}

内存

缓存

固态硬盘

寄存器

使用深度优先搜索(DFS)遍历一个 n n 行 m m 列的矩阵。从左上角开始搜索,每次只能向右或向下移动一个位置。在搜索过程中,需要使用一个栈来维护当前搜索路径上的已访问位置。为了确保能够完成整个矩阵的遍历,栈的大小至少为( )。(注:本题不考虑栈空间的大小限制。) {{ select(9) }}

max(n,m)

m+n

m+n-1

n*m

以下代码的时间复杂度是( )。

cpp int n,i=1; cin>>n; while(i<n){ i=i*3; } {{ select(10) }}

O ( 1 ) O(1)

O ( n ) O(n)

O ( log ⁡ n ) O(logn)

O ( n log ⁡ n ) O(nlogn)

某城市有8个交通枢纽,如果要建设一个完全图式的道路网络,使得任意两个枢纽之间都有直达道路,需要建设( )条道路。 {{ select(11) }}

28

64

16

7

从5个不同的红球和3个不同的蓝球中,至少取1个球,最多取4个球,且红球和蓝球都必须至少取一个,不同的取法有( )种。 {{ select(12) }}

120

125

180

210

二叉树的节点按照先从上往下,后从左往右的顺序(对比“先行后列”的表达方式)进行编号,( )遍历方式可以按升序输出二叉搜索树的所有节点。 {{ select(13) }}

前序

中序

后序

层次

一个时间复杂度为 O ( n 3 ) O(n 3 ) 的算法,当 n n 从100增大到200时,运行时间大约变为原来的( )倍。 {{ select(14) }}

2

4

8

16

一段时长10分钟的视频,分辨率为 1080 P 1080P( 1920 × 1080 1920×1080),帧率为30帧/秒,颜色深度为24位。如果压缩比为 50 : 1 50:1,则压缩后的文件大小约为( )。 {{ select(15) }}

1.2GB

2.1GB

2.24GB

104.3GB

二、阅读程序(程序输入不超过数组或字符串定义的范围;判断题正确填 ✓ ✓,错误填 × ×;除特殊说明外,判断题每题2分,选择题每题3分,共计40分) (1) cpplline-numbers #include using namespace std; int solve(int x,int y){ if (y == 0) return x; if (x < y) swap(x,y); return solve(y,x-y); } int main(){ int a,b; cin >> a >> b; int k = solve(a,b); cout << a/k << "/" << b/k << endl; return 0; } // 输入的a和b是不大于10000的正整数 判断题 函数solve(int x,int y)计算x和y的最大公约数。 {{ select(16) }}

正确

错误

把第5行代码去掉,程序会正常输出,但结果数值可能不对。 {{ select(17) }}

正确

错误

如果输入的值为160和115,则程序的输出结果为23/32。 {{ select(18) }}

正确

错误

选择题 (4分)如果输入1817和299,则输出为( )。 {{ select(19) }}

1817/299

97/13

79/23

79/13

(4分)如果输入x,y为1~10000中随机生成的数,则程序的平均时间复杂度为( )。 {{ select(20) }}

O ( 1 ) O(1)

O ( log ⁡ n ) O(logn)

O ( n ) O(n)

O ( n 2 ) O(n 2 )

(2) cpplline-numbers #include using namespace std; int main() { int n, sum = 0; cin >> n; int arr[100]; for (int i = 0; i < n; i++){ cin >> arr[i]; } for (int i = 0; i < n; i++){ int cnt = 0; for (int j = 0; j < n; j++){ if (arr[j] > arr[i]){ cnt++; } } sum += (cnt == 1) * arr[i]; } cout << sum << endl; return 0; } // 输入的所有数为绝对值均不大于1000的整数 判断题 若输入数组为[5,3,8,2],则程序输出为5。 {{ select(21) }}

正确

错误

数组中可能存在多个元素满足条件,程序会将它们全部累加。 {{ select(22) }}

正确

错误

如果程序输出为0,则数组中的所有元素一定都相等。 {{ select(23) }}

正确

错误

选择题 (4分)若输入数组为[9,8,7,6,5,4,3,2,1,0,-1,-2],则输出为( )。 {{ select(24) }}

-2

-1

8

9

该程序计算的是数组中( )。 {{ select(25) }}

第二大元素的值

所有比平均值大的元素之和

所有满足“恰好有一个元素比它大”的元素之和

最大元素和最小元素的和

(3) cpplline-numbers #include #include #include using namespace std;

int n, k, ans = 0; vector nums; vector used;

void dfs(int pos, int sum, int count) { if (count == k) { if (sum % 2 == 0) { ans++; } return; } if (pos >= n) return;

if (!used[pos]) {
    used[pos] = true;
    dfs(pos + 1, sum + nums[pos], count + 1);
    used[pos] = false;
}

dfs(pos + 1, sum, count);

}

int main() { cin >> n >> k; nums.resize(n); used.resize(n, false);

for (int i = 0; i < n; i++) {
    cin >> nums[i];
}

dfs(0, 0, 0);
cout << ans << endl;
return 0;

} 判断题 如果输入数据中存在重复数字,则重复数字的数量不会影响输出结果。 {{ select(26) }}

正确

错误

去掉nums.resize(n);和used.resize(n, false);这两行代码,不会影响程序的正常运行。 {{ select(27) }}

正确

错误

如果 n

10 n=10, k

2 k=2,n个数为 1 ∼ 10 1∼10 的任意排列,则输出结果是 2 C 5 2 2C 5 2 ​ 。 {{ select(28) }}

正确

错误

选择题 如果输入的k为0,则程序的输出结果为( )。 {{ select(29) }}

0

1

需要结合数组的数值,才能计算结果

以上都不对

(4分)程序的时间复杂度是( )。 {{ select(30) }}

O ( n ) O(n)

O ( n 2 ) O(n 2 )

O ( 2 n ) O(2 n )

O ( n k ) O(n k )

三、完善程序(单选题,每小题3分,共计30分) (1) 归并排序 cpplline-numbers #include #define N 100009 using namespace std; int n; int a[N],L[N],R[N];

void merge(int l, int m, int r) { int n1 = m - l + 1; int n2 = r - m;

for (int i = 0; i < n1; i++)
    L[i] = a[l + i];
for (int j = 0; j < n2; j++)
    R[j] = a[①];

int i = 0, j = 0, k = l;
while (②) {
    if (L[i] <= R[j]) {
        a[k] = L[i++];
    } else {
        a[k] = R[j++];
    }
    ++k;
}

while (i < n1) {
    a[k++] = L[i++];
}

while (j < n2) {
    a[k++] = R[j++];
}

}

void mSort(int left, int right) { if (left < right) { int mid = left + (right - left) / 2; mSort(left, mid); mSort(mid + 1, right); merge(③); } }

int main() { cin >> n;

for (int i = 0; i < n; i++) {
    cin >> a[i];
}
mSort(④);
for (int i = 0; i < n-1; i++) {
    cout << a[i] << " ";
}
cout << ⑤ << endl;
return 0;

} ①处应填( ) {{ select(31) }}

j

j+1

m+j

m+1+j

②处应填( ) {{ select(32) }}

i<n && j<n

i<=n && j<=n

i<n1 && j<n2

i<=n1 && j<=n2

③处应填( ) {{ select(33) }}

mid, left, right

right, left, mid

left, mid, right

left, right, mid

④处应填( ) {{ select(34) }}

0, n-1

0, n

1, n-1

1, n

⑤处应填( ) {{ select(35) }}

""<<a[n-1]

a[n-1]

""<<a[n]

a[n]

(2) 最长波动子序列 cpplline-numbers #include #include #include #define N 1009 using namespace std; int n; int dp[N][2]; int main() { cin >> n; vector nums(n); for (int i = 0; i < n; i++) { cin >> nums[i]; }

①

for (int i = 1; i < n; i++) {
    for (int j = 0; ②; j++) {
        if (③) {
            int tmp = dp[j][1] + 1;
            if (tmp > dp[i][0]) {
                dp[i][0] = tmp;
            }
        } else if (nums[i] < nums[j]) {
            int tmp = ④;
            if (tmp > dp[i][1]) {
                dp[i][1] = tmp;
            }
        }
    }
}
int max_Len = 1;
for(int i = 1; i < n; i++){
    max_Len = max(max_Len, ⑤);
}
cout << max_Len << endl;
return 0;

} ①处应填( ) {{ select(36) }}

memset(dp,1,sizeof(dp));

memset(dp,0x3f,sizeof(dp));

fill(dp,dp+n*2,1);

fill(dp[0],dp[0]+n*2,1);

②处应填( ) {{ select(37) }}

j<n

j<=n

j<i

j<=i

③处应填( ) {{ select(38) }}

nums[i] > nums[j]

nums[i] >= nums[j]

nums[j] > nums[i]

nums[j] >= nums[i]

④处应填( ) {{ select(39) }}

dp[i][0]+1

dp[i][1]+1

dp[j][0]+1

dp[j][1]+1

⑤处应填( ) {{ select(40) }}

dp[i][0]

dp[i][1]

max(dp[i][0], dp[i][1])

min(dp[i][0], dp[i][1])