#ACSP1001. cspj-模拟题1

cspj-模拟题1

一、单项选择题(共15题,每题2分,共计30分;每题有且仅有一个正确选项)

  1. 中国的国家顶级域名是({{ select(1) }})。
  • .cn
  • .ch
  • .chn
  • .china
  1. 二进制数 11 1011 1001 0111 和 01 0110 1110 1011 进行按位与运算的结果是({{ select(2) }})。
  • 01 0010 1000 1011
  • 01 0010 1001 0011
  • 01 0010 1000 0001
  • 01 0010 1000 0011
  1. 一个 32 位整型变量占用({{ select(3) }})个字节。
  • 4
  • 8
  • 16
  • 32
  1. 在标准 ASCII 码表中,已知英文字母 Z 的 ASCII 码十进制表示是 90,那么英文字母 B 的 ASCII 码二进制表示是({{ select(4) }})。
  • 01000001
  • 01000010
  • 01000011
  • 01000000
  1. 以下关于 CSP 与 NOIP 的描述正确的是({{ select(5) }})。
  • CSP 属于非专业认证,只有在校生才能参加
  • CSP 是中国电子学会举办的程序设计竞赛
  • CSP 和 NOIP 毫无关系,没参加 CSP 也可以直接参加 NOIP
  • CSP 和 NOIP 都是 CCF 旗下的程序设计赛事
  1. 以下不能用作 C++ 程序中的标识符的是({{ select(6) }})。
  • private
  • friends
  • news
  • pascal
  1. NOI 复赛测评机所用的 Linux 系统属于({{ select(7) }})。
  • UML
  • IDE
  • OS
  • Database
  1. 如果 65,536 种颜色用二进制编码来表示,至少需要({{ select(8) }})个二进制位。
  • 16
  • 8
  • 12
  • 10
  1. 搜索算法中的 BFS 算法经常用到的数据结构是({{ select(9) }})。
  • 链表
  • 队列
  1. 在已经从小到大排好序的 n 元素单向链表中查询是否存在关键字为 k 的元素,最坏情况下运行的时间复杂度是({{ select(10) }})。
  • O(logn)
  • O(n)
  • O(n²)
  • O(nlogn)
  1. 在下列各种排序算法中,不是以“比较”作为主要操作的算法是({{ select(11) }})。
  • 归并排序
  • 快速排序
  • 冒泡排序
  • 桶排序
  1. 关于计算机网络,下面的说法中正确的是({{ select(12) }})。
  • 现在的计算机必须连接到互联网才能正常运行
  • 192.168.0.1 是 A 类 IP 地址
  • 互联网的诞生用到了现代计算机技术和现代通信技术
  • 接入互联网的计算机的 IP 地址已经全部升级到了 IPv6 地址
  1. 将 (2,6,10,17) 分别存储到某个地址区间为 0~10 的哈希表中,如果哈希函数 h(x) =({{ select(13) }}),将不会产生冲突,其中 a%b 表示 a 除以 b 的余数,sqrt 表示开平方,floor 表示向下取整。
  • x%11
  • x²%11
  • 2x%11
  • floor(sqrt(x))%11
  1. 现在有一个十六进制数 27,它等于二进制数的({{ select(14) }})。
  • 100011
  • 100101
  • 100111
  • 100011
  1. 以下逻辑表达式中,不管 A、B 如何取值,恒为假的是({{ select(15) }})。
  • ( ¬A∨B)∧(A∨B)∧A
  • (( ¬A∨B)∨(A∨¬B))∧B
  • A∧((¬A∨B)∨(A∨¬B))∧¬A
  • (( ¬A∨B)∨(A∨¬B))∧A∧¬B

二、阅读程序(程序输入不超过数组或字符串定义的范围;判断题正确填 √,错误填 ×;除特殊说明外,判断题每题1.5分,选择题每题3分,共计40分)

(1)

#include <bits/stdc++. h>
using namespace std;
int gcd(int a, int b){
    int tmp;
    if(b) tmp = a%b;
    else return a;
    while(tmp){
      a = b;
      b = tmp;
      tmp = a%b;
    }
    return b;
}
int lcm(int a, int b){
    return a/gcd(a,b)*b;
}
int main(){
    int a,b;
    cin >> a >> b;
    cout << gcd(a, b) << endl;
    return 0;
}

判断题

  1. 若输入0 2024, 则输出结果为0。({{ select(16) }})
  • 正确
  • 错误
  1. 将第5行中的if(b)改为if(0 != b), 程序的运行结果不会改变。 ({{ select(17) }})
  • 正确
  • 错误
  1. 若输入2.4 4.8, 则输出错误。 ({{ select(18) }})
  • 正确
  • 错误
  1. 将第15行 return a/gcd(a,b)b替换成return ab/gcd(a,b), 程序的运行结果不会改变。 ({{ select(19) }})
  • 正确
  • 错误

选择题

  1. 若输入数据为20244204 12348, 则输出为({{ select(20) }})。
  • 18
  • 36
  • 12
  • 24
  1. 若将第20行cout << gcd(a,b) << endl替换成cout << lcm(a, b)<< endl,输入数据为 20244204 12348, 则输出为({{ select(21) }})。
  • 6,943,761,972
  • 程序出错,无输出
  • 3,471,880,986
  • 某个负数

(2)

#include <bits/stdc++. h>
using namespace std;
int main()
{
    char s[128] = {0};
    cin. getline(s,128);
    for(int i = 0; i < strlen(s); ++i){
       if(s[i] >= 65 && s[i] <= 90){
           if(s[i] == 90)
              s[i] = 65;
           else
              s[i] += 1;
           s[i] ^= ' ';
       }
    }
    cout << s << endl;
    return 0;
}

判断题

  1. 输入一个长度大于128的字符串,程序的输出一定会出错。 ({{ select(22) }})
  • 正确
  • 错误
  1. 将第6行 cin.getline(s,128)更换为 getline(cin,s), 程序的运行结果不变。 ({{ select(23) }})
  • 正确
  • 错误
  1. 将第13行s[i] ^= ' '更换为s[i] ^= 32, 程序的运行结果不变。 ({{ select(24) }})
  • 正确
  • 错误
  1. 将第9行if(s[i] ==.90)更换为 if(s[i] == 'Z'), 程序的运行结果不变。 ({{ select(25) }})
  • 正确
  • 错误

选择题

  1. 若输入字符串s为CSPjs2024, 则输出为({{ select(26) }})。
  • dtqjs2024
  • cspjs2024
  • DTQjs2024
  • CSPjs2024
  1. 若输出 bcdea, 则输入字符串s为({{ select(27) }})。
  • BCDEA
  • ABCDZ
  • abcde
  • bcdez

(3)

#include <bits/stdc++. h>
using namespace std;
int used[20],a[20],n;
long long ret=0;
bool flag;
void dfs(int x)
{
    int i;
    if(x > n)
    {
       flag=1;
       for(i=1;i<=n;i++)
          if(a[i]+i > n+2)
          {
             flag=0;
             break;
          }
       if(flag) ret++;
       return;
    }
    for(i=1;i<=n;i++)
       if(used[i]==0)
       {
          used[i]=1, a[x]=i;
          dfs(x+1);
          used[i]=0, a[x]=0;
       }
}
int main()
{
    cin>>n;
    dfs(1);
    cout<<ret;
    return 0;
}

判断题

  1. 如果输入n的值为0,那么程序在运行过程中一定会出现错误。 ({{ select(28) }})
  • 正确
  • 错误
  1. 如果将第26行的a[x]=0去掉,输出的结果不会改变。 ({{ select(29) }})
  • 正确
  • 错误
  1. 该程序算法的时间复杂度是 O(n!*n)。 ({{ select(30) }})
  • 正确
  • 错误
  1. 输入某个正整数n,程序运行的输出结果可能会等于0。 ({{ select(31) }})
  • 正确
  • 错误

选择题 32. 若输入 n=2,那么输出结果是({{ select(32) }})。

  • 1
  • 2
  • 3
  • 0
  1. 若输入 n=5,那么输出结果是({{ select(33) }})。
  • 16
  • 5
  • 10
  • 12

34.(4分)若输出结果为128, 则输入n 是({{ select(34) }})。

  • 8
  • 7
  • 16
  • 32

三、完善程序(单选题,每小题3分,共计30分)

(1) 输入一个十进制正整数 nn,然后将 nn转换为二进制数,最后统计二进制数的各位数字,看看一共有多少位为1,然后打印出总数。

输入格式:

第1行输入十进制正整数nn

输出格式:

输出一个整数,表示十进制正整数n转换成的二进制数中有多少位为1。

输入样例:

127

输出样例:

7

样例说明:

十进制数127转换为二进制数 1111111,二进制位一共有7个1,所以输出7。

#include<bits/stdc++. h>
using namespace std;
int a[33], cnt;

int main()
{
    int n, sum,x;
    cin>>n;
    cnt=0;
    ①;
    while(x>0)
    {
      a[②]=x%2;
      ③;
    }
    sum=0;
    for(int i=1;④;i++)
    if(a[i]==1)
      ⑤;
    cout<<sum<<endl;
    return 0;
}

35.①处应填({{ select(35) }})。

  • x=n
  • x=1
  • x=0
  • x=n-1

36.②处应填({{ select(36) }})。

  • --cnt
  • ++cnt
  • cnt--
  • cnt

37.③处应填({{ select(37) }})。

  • x/=2
  • n++
  • x++
  • n--

38.处应填({{ select(38) }})。

  • i<cnt
  • i<cnt/2
  • i<=cnt
  • i<=cnt/2

39.⑤处应填({{ select(39) }})。

  • sum--
  • sum=x
  • sum=0
  • sum++

(2)

在一个n×n的棋盘上布满了0和1,如图(a)所示(n=7)。为叙述方便,将0用字母表示,如图(b)所示。

跳棋规则如下。

(i) 从某个0格出发,可以向上、下、左、右4个方向连续越过若干个(至少1个)1格后跳入下一个0格。

如图(b)所示,从A 出发,可跳到B,或者跳到E,但不能直接跳到K。在跳到B之后还可以继续跳到F,在跳到E之后可继续跳到F 或K,直到不能再跳为止。

(ii)每个0格只能到达一次,给出的起始点不能再次到达,也不能越过。跳过的距离为跳过1格的个数加1,如从A到B,跳过距离为3,从B到F,跳过距离为2。

问题:当给出棋盘和起始点之后,最远能跳的距离是多少? 如图(b)所示,从A 出发,可跳的路线不止一条,其中一条为:

A - B - F - L - K - E (可能不唯一) 3 2 3 3 3 它的跳过距离为14。

输入格式:

第1行 3个整数n(1≤n≤100)、x、y(x,y是起始点坐标, 图(b)中A 处坐标为1,3)。接下来n行,每行n个数(0或1),数与数之间用一个空格分隔。

输出格式:

一个整数,即最大可跳距离(若不能跳,则输出0)。

输入样例:

4 3 2
1 0 1 0
1 1 1 1
0 0 1 0
1 1 0 1

输出样例:

6

#include <bits/stdc++. h>
using namespace std;
int n,i,j,k, ans;

int a[105][105], vis[105][105]; //a 表示棋盘, vis统计点是否走过
int dx[4]={-1,1,0,0}, dy[4]={0,0,1,-1};

void dfs(int x, int y, int step)

{
    ans = ①;
    for(int i=0;i<4;i++)
    {
       int tx=x, ty=y,s=0;
       while(tx+dx[i]>0 && tx+dx[i]<=n && ty+dy[i]>0 && ty+dy[i]<=n)
       {
          tx+=dx[i];
          ty+=dy[i];
          s++;
          if(②)
             break;
      }
      if(tx>0 && tx<=n && ty>0 && ty<=n && vis[tx][ty]==0 && a[tx][ty]==0 && s!=1)
      {
         vis[tx][ty]=1;
         dfs(tx, ty,③);
         ④;
      }
    }
}
int main()
{
    int x,y,i,j;
    cin>>n>>x>>y;
    for(i=1;i<=n;i++)
       for(j=1;j<=n;j++)
          cin>>a[i][j];
    ⑤;
    dfs(x,y,0);
    cout<<ans<<endl;
    return 0;
}

40.①处应填({{ select(40) }})。

  • 0
  • max(ans, step)
  • 1
  • step

41.②处应填({{ select(41) }})。

  • vis[tx][ty] == 1
  • vis[tx][ty] == 0
  • a[tx][ty] == 1
  • a[tx][ty] == 0

42.③处应填({{ select(42) }})。

  • step+s
  • step+1
  • step
  • step-1

43.④处应填({{ select(43) }})。

  • vis[tx][ty] = 1
  • vis[tx][ty] = 0
  • a[tx][ty] = 1
  • a[tx][ty] = 0

44.⑤处应填({{ select(44) }})。

  • a[x][y] = 1
  • a[x][y] = 0
  • vis[x][y] = 1
  • vis[x][y] = 0