1220: 2023CSP-J初赛模拟试题-2
题目描述
一、 选择题(每题2分,共30分)
1、关于计算机编程语言,下列说法错误的是()
A.机器语言就是01码语言
B.C语言是面向对象语言
C.Java是面向对象语言
D.计算机唯一能直接理解并执行的语言是机器语言
2、存储器是用来存放()信息的主要部件。
A.二进制 B.十进制
C.八进制 D.十六进制
3、计算机之父是()
A.艾伦·图灵 B.冯·诺伊曼
C.莫奇莱 D.比尔·盖茨
4、在编程的时候,使用一个4个字节的数据类型定义了1024×2048=2097152个变量,请问大致使用了多少内存?()
A.1MB B.2MB
C.4MB D.8MB
5、假设A=true,B=false,C=true,以下为真的是()(“^”是异或)。
A.A^B^C B.A&(B^C)
C.A^(B^C) D.A&B&C
6、考虑下面的算法:
int main(){
string s;
cin>>s;
int len;
cin>>len;
while(s.size()<len) s="1"+s;
cout<<s<<endl;
return 0;
}
输入为“996111 1000000000”,输出中有()个字符‘1’。
A.999999997 B.999999994
C.4 D.1
7、设x是任意输入的数,阅读下面的递归算法:
void dfs(long long x){
if(x>9) dfs(x/10);
printf("%lld",x%10);
}
请问递归算法结束之后输出的是什么?()
A.将x翻转后输出
B.将x除去个位以外的数输出
C.将x除去最高位以外的数输出
D.输出x
8、“32位微型计算机”中的32位是指()。
A.微机型号 B.内存容量
C.存储单位 D.机器字长
9、由n个节点组成的m棵树,有()条边。
A.n–m B.n–m+1
C.n–m–1 D.n–1
10、二进制数011011111011转换成十六进制数是()。
A.6FA B.6FB
C.6EC D.5EA
11、有七个小朋友排成一列,其中小明和小红不能站在相邻的位置,则有()种排列的方法。
A.3600 B.1800
C.1800 D.720
12、我们往一个数据结构内按先后顺序丢入数值5,7,9,3。等到所有数都丢进去之后,从该数据结构内按顺序取出数值,按先后顺序为3,5,7,9,请问可能是如下哪种数据结构?()
A.队列 B.栈
C.小根堆 D.链表
13、一棵高度为10的二叉树,最多具有()个节点。
A.512 B.511
C.255 D.1023
14、Internet中运输层适合可靠性要求高的通信协议是()
A.UDP B.IPC
C.TCP D.FTP
15、抽奖箱子里装了4个红色的球、5个黄色的球、6个蓝色的球,如果蒙眼去摸,为保证取出的球中有两个球的颜色相同,则最少要取出多少个球?()
A.2 B.3
C.4 D.5
二、 阅读程序(判断题每题3分,选择题每题3分,共30分)
1、阅读下列程序并回答问题。
16、如果输入的数大于等于10^100(古戈尔)会出现数组越界的情况。
A.√ B.×
17、如果输入一个long long范围以内的数字,那么输出的数字相当于将输入的数字翻转后输出。
A.√ B.×
18、将第9行“while(x)”改成“while(x>0)”,并在第13行之前加上一句“x=0;”,程序运行的结果不会改变。
A.√ B.×
19、假设输入的数字在long long范围以内,如果输出的数字为0,那么输入的数字只能是0。
A.√ B.×
20、若输出的数字为“998244353”,则下列说法正确的是 ()。
A、输入可以是99824435300
B、输入可以是3534428991
C、输入可以是3534428990000
D、输入只能是353442899
2、阅读下列程序并回答问题。
假设输入的n是int范围内的正整数
21、所有数字均不会超过int上限。
A.√ B.×
22、将第13行的「j<=i」改为「j<=n」不影响程序的结果。
A.√ B.×
23、将第9行放在现在的第15行后不影响程序的结果。
A.√ B.×
24、若输入的n为7,输出为
A.127 B.128
C.255 D.256
25、为了保证所有整数均不溢出,n最大可以是
A.20 B.24
C.28 D.30
三、 完善程序(每题4分,共40分)
1、小C到商店购物,她只带了SW元钱。有n件商品,第i件商品的价格为Wi元,小C对它的满意度为Vi。小C想要知道,用自己仅有的SW元钱,能买到的所有商品的满意度之和最大是多少。数据保证1≤n≤100,1≤SW≤10000,1≤Wi≤100,1≤Vi≤100。
#include<bits/stdc++.h>
using namespace std;
const int INF = 0x3f3f3f3f;
int n, SW, w[105], V[105], Dp[①];
int main(){
cin >> n >> SW;
for(int i= 1; i <= n; i ++)
cin >> W[i] >> V[i];
for(int i = 1; i <= SW; i ++) Dp[i] = ②;
for(int i = 1; i <= n; i ++)
for(③)
Dp[j] = max(Dp[j], ④);
int ans = 0;
for(int i = 1; i <= SW; i ++)
⑤;
cout << ans << "\n";
return 0;
}
26、①处应填 ()
A.100 B.105
C.10000 D.10005
27、②处应填 ()
A.INF B.0
C.−231−1 D.1
28、③处应填 ()
A.intj=SW;j>=W[i];j-- B.intj=W[i];j<=SW;j++
C.intj=1;j<=n;j++ D.intj=n;j>=1;j--
29、④处应填 ()
A.Dp[i–W[j]]+V[j] B.Dp[i–V[j]]+W[j]
C.Dp[j–W[i]]+V[i] D.Dp[j–V[i]]+W[i]
30、⑤处应填 ()
A.ans=max(ans,Dp[i]) B.ans=min(ans,Dp[i])
C.ans=ans+Dp[i] D.ans=ans–Dp[i]
2、给定一个字符串S,有q组询问,每次给定一个字符串T,求字符串T是否是S中的一个子序列。数据保证1≤|S|≤105,1≤∑|T|≤106,所有字符串仅包含小写字母。
#include<bits/stdc++.h>
using namespace std;
const int BASE = 26;
string S, T;
int q, Pos[100005][BASE];
int main(){
cin >> S;
int n = S.size();
for(int i = 0; i < BASE; i ++) ① = -1;
for(int i = n-1; i >= 0; i --){
for(int j = 0; j < BASE; j ++)
②;
③;
}
cin >> q;
while(q--){
cin >> T;
int len = T.size(), now = 0;
for(int i = 0; ④; i ++)
now = ⑤;
if(now != -1)
cout << "YES\n";
else
cout << "NO\n";
}
return 0;
}
31、①处应填()
A.Pos[i][n–1] B.Pos[i][n]
C.Pos[n–1][i] D.Pos[n][i]
32、②处应填 ()
A.Pos[i][j]=Pos[i-1][j] B.Pos[i][j]=Pos[i+1][j]
C.Pos[i][j]=Pos[i][j–1] D.Pos[i][j]=Pos[i][j+1]
33、③处应填 ()
A.Pos[i][S[i]–‘a’]=I B.Pos[i][S[i]–‘A’]=i
C.Pos[i][S[i]]=I D.Pos[i][i]=S[i]
34、④处应填 ()
A.i<len B.now!=-1
C.i<len&&now!=n D.i<len&&now!=-1
35、⑤处应填 ()
A.Pos[now][T[i]–‘a’] B.Pos[now][S[i]–‘a’]
C.Pos[now+1][T[i]–‘a’] D.Pos[now+1][S[i]–‘a’]