1220: 2023CSP-J初赛模拟试题-2

文件提交:无需freopen 内存限制:128 MB 时间限制:1.000 S
评测方式:普通裁判 命题人:
提交:2 解决:0

题目描述

一、    选择题(每题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分)

1C到商店购物,她只带了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’]

输出


来源/分类