2019 CSP-S1 模拟赛3-模拟测试题

发布于:2022-12-24 ⋅ 阅读:(573) ⋅ 点赞:(0)

目录

一: 单项选择题(共10题,每题2分,共计20 分;每题有且仅有一个正确选项)

二, 不定项选择题 (共5题, 每题2分, 共计  10分;每题有一个或多个正确选项,多选 或少选均不得分)

三. 问题求解(共2题, 每题5分, 共计10分) 

四: 阅读程序写结果(共4题, 每题8分, 共  计32分)

五. 完善程序(共2题, 每题14分, 共计28分)


2019 CSP-S1 模拟赛3          

: 单项择题(10,每题2,共计20 ;每题有且仅有一个正确选项)

1 : 下列哪一种语言是纯函数式编程语言

A: java

B : C++

C : ruby

D : haskell

2 : 下列关于CSP -JS认证的说法错误的是:

A:CSP -JS第一轮试卷为纸质版 (少数机试方式认证的省份除外) ,第 轮试卷为电子版。

B :CSP -JS两轮认证中,认证开始15分钟后,认证者不能再进入认证 点。有认证者提前离开认证点,除身体特别原因外,须在认证进行2 时后方可准予离开。

C :在第一轮认证期,任何人不得将试卷携带出考场。

D :认证期间,如有认证者相互讨论、使用网络、利用各种方式拷贝或 传递息等违反考场纪律的,涉事认证者均可被立刻取消参赛资格, 当年算起被禁赛三年。

3 : 下面哪个选项是-1234在计算机中的二进制码

A: 11111111111111111111101100101110

B : 10000000000000000000010011010010

C : 10000000000000000000100011010010

D : 11111111111111111111001100101110

4:下列关于无向图的dfs生成树的说法正确的是

A: 无向图的dfs生成树是最小生成树的一种

B : 无向图的dfs生成树是用kruskal算法求出来的

C : 无向图的dfs生成树分为树边和返祖边两种边

D :无向图的dfs生成树分为树边,返祖边,横叉边三种边

5 : 分辨率为900*600, 16位色的位图, 存储图像信息所需的空间为

A: 1054.6875 KB

B : 2019.375KB

C : 32.96KB

D : 4218.75

6 : 算法的计算时间表示为递推关系式:

T(N) = 2T(N/2) + n^2

算法的时间复杂度为:

 

7 : 有一个整数n=10, 每次会随机选择n的一个因子k, n变成k, 请问n 1的期望步数是多少

A: 8/3 B:8/5

C : 3/2 D : 9/4       

                                                                                

8 、将数组{1,2,3,4,5,6,7,8}中的元素用插入排序的方法按从大到 顺序排列,需要比较的 数是 ( )                   

A7 B 27 C 28 D 64

9 :已知2019101日是星期二,请问1949930日是星期几

A:星期 B:星期二 C:星期四 D :星期五

10: 已知二叉树的中序遍历为FGABDCE , 后序遍历为GFADECB 请问先序遍历是?

A: BAFGCDE

B : BCFGADE

C : BCDEAFG

D : BACFGDE

, 不定项选择题 (5, 每题2, 共计  10;每题有一个或多个正确选项,多选 少选均不得分)

11: 以下属于UDPTCP的区别的是

A: TCP向连接 (如打电话要先拨号建立连接) 。UDP是无连接的, 即发送数据之前不需要建立连接

B : TCP提供可的服务,通过TCP连接传送的数据,无差错,不丢 不重复,且按序到达。UDP尽最大努力交付,即不保证可靠交 

C :TCP传输效率相对较低。UDP传输效率高,适用于对高速传输和实 时性较高的通信或广播通信。

D :TCPUDP都支持一对一,一对多,多对一和多对多的交互通信。

12: 下列关于机器字长的说法正确的是

A: 机器字长是指计算机进行一次整数运算所能处理的二进制数据的位 数

B : 64位机器中一个int* 指针变量的大小是4个字节

C : 器字长反映了计算机的运算精度,即字长越长,数的表示范围也 越大,精度也越高                                         

 D :机器字长与主存储器的字长都会影响CPU的工作效率            

13:以下关于二分图的说法正确的是                            

A:二分图的最小点覆盖等于二分图的最大匹配                 

B :二分图的最大独立集等于二分图的最大匹配                  

C :二分图的最小边覆盖等于二分图的最大匹                     

D :分图的最小点覆盖等于二分图的最小边覆盖

14设栈 S 的初始状态为空,元素 a,b,c,d,e,f,g 依次入栈,以下出栈序 列不可能出现的

Aa,b,c,e,d,f,g B b,c,a,f,e,g,d C a,e,d,c,b,f,g D g,e,f,d,c,b,a

15: 关于线段树与树状数组的描述正确的是

A:点区间为[1,n] 的 线段树存在一种标号方法可以恰好只用2倍的 来标号所有节点                                          

B :树状数组的一个常用作用是维护前缀或者后缀息               

C :线段树区间查询的本质是将一个区间信息划分成最多logn个线段 点的信息的并                                                

D :树状数组也能支持单点修改, 区间维护最大值                    .

. 问题求解(2, 每题5, 10) 

1 : 在一个夜风高的夜晚, 8个人要过桥,每个人单独过桥的时间分别为 10 ,30 ,35, 20, 15, 12, 17, 26 已知桥非常的窄,只允许两个人同时过  ,过桥时间为这两个人中较慢的那个人的过桥时间. 而且他们只有 把手电, 没有手电筒是无法过桥的, 请问全部人过桥需要多少时间.

2 : 13条如下形状的折线最多将平面分割成多少个区域, 折线可以看成 出发的两条射线

: 阅读程写结果(4, 每题8,   32)

23:

#include<bits/stdc++ .h>

using  namespace  std;

int  main()  {

int  sum  =  0;

for  (int  i  =  1;  i  <=  50;  i++)  {

sum  =  sum  +  i  *  i  *  i  *  i ;

}

cout  <<  sum  <<endl;

}

24:

#include<bits/stdc++ .h>

using  namespace  std;

int  cnt;

int  f(int  n)

{

if(n  ==  1   ||  n  ==  2)  {

return  ;

}

cnt++;

return  f(n  -  1)  +  f(n  -  2)  +  1;

}

int  main()  {

cnt  =  0;

f(20);

cout  <<cnt  <<endl;

}

:

25:

#include<cstdio>

#include<cstring>

int  m;

char  b[1000];

int  p[1000];

void  getp(){

p[1]=0;

int  i ,j=0;

for(i=2;i<=m;i++){

while(j>0&&b[j+1] !=b[i])  j=p[j];

if(b[j+1]==b[i])  j+=1;

p[i]=j ;

}

}

int  main()  {

scanf("%s" ,  b  +  1);

m  =  strlen(b  +  1);

getp();

for  (int  i  =  1;  i  <=  m;  i++)  printf("%d  " ,  p[i]); return  0;

}

: aababaaba

26:

#include<stdio .h>

#include<string .h>

#define  maxn  300000

int  a[maxn],c[maxn],p[maxn];

int  find(int  x){return  x==p[x]  ?  x   :

p[x]=find(p[x]);}

int  lowbit(int  x){

return  x& -x;

}

void  update(int  x ,int  d){

for(;x<=maxn;x+=lowbit(x))

c[x]+=d;

}

int  find_kth(int  k)

{

int  ans  =  0 ,  cnt  =  0 ,  i ;

for  (i  =  20;  i  >=  0;  i --)

{

ans  +=  (1  <<  i);

if  (ans  >=  maxn ||  cnt  +  c[ans]  >=  k)

ans  -=  (1  <<  i);

else

cnt  +=  c[ans];

}

return  ans  +  1;

}

int  main()

{

int  i ,n ,m ,q ,x ,y ,k ,l , r;

scanf("%d%d" ,&n ,&m);

for(i=1;i<=n;i++)  p[i]=i ;

for(i=1;i<=n;i++)  a[i]=1;

update(1 ,n);

int  num=n;

for(i=1;i<=m;i++)

{

scanf("%d" ,&q);

if(q==0)

{

scanf("%d%d" ,&x ,&y);

x=find(x);

y=find(y);

if(x==y)  continue;

update(a[x], -1);

update(a[y], -1);

update(a[x]+a[y],1);

p[y]=x;

a[x]+=a[y];

num -- ;

}

else

{

scanf("%d" ,&k);

k=num -k+1;

printf("%d  " ,find(k));

}

}

return  0;

}

10  10

0  1  2

1  4

0  3  4

1  2

0  5  6

1  1

0  7  8

1  1

0  9  10

1  1

. 完善程(2, 每题14, 共计28)

 

27: 寻找一个排列的下一个排列 , 得分为(2,3,3,3,3)

class  Solution  {

public :

void  reverse1(vector<int>&  nums ,int  l ,int  r){ while(l<r){

int  temp=nums[l];

nums[l]=nums[r];

nums[r]=temp;

l++ , r -- ;

}

}

void  nextPermutation(vector<int>&  nums)  { int  j ;

for(int  i=nums .size() -1;i>0;i --){

 

if(__(1)__){

for(  j=nums .size() -1;__(2)__ ;j --){ if(___(3)__){

break;

}

}

swap(___(4)___ ,____(5)__);

reverse1(nums ,i ,nums .size() -1); return;

}

}

reverse(nums .begin(),nums .end());

}

};

28:求最近点对 (2,3,3,3,3)

#include  <iostream>

#include  <cstring>

#include  <algorithm>

#include  <cstdio>

#include  <cmath>

using  namespace  std;

struct  point

{

double  x ,y;

}p[100005];

int  a[100005];

int  cmpx(const  point  &a ,const  point  &b)

{

return  a .x  <  b .x;

}

int  cmpy(const  int  &a ,const  int  &b)

{

return  p[a] .y  <  p[b] .y;

}

double  dis(int  a ,int  b)

 

}

u?uun  sbu)) d]b[ .x  -  d]q[ .x(  *  ) d]b[ .x  -  d]q[ .x( +  ) d]b[ .y  -  d]q[ .y(  *  ) d]b[ .y  -  d]q[ .y((

{

pouql?  )lo?s) !n斗  l?}斗‘  !n斗  u!6|斗(

}

!}) l?}斗  ==  u!6|斗(

u?斗uun  t000000000

!}) l?}斗  +  t  ==  u!6|斗(

u?斗uun  __) t( __

!n斗  m!p  =  ) l?}斗  +  u!6|斗(  <<  t

pouql?  pt  =  )lo?s) l?}斗m!p(

pouql?  pZ  =  )lo?s) m!p+t____) Z( _(‘

pouql?  p  =  m!n) ptpZ(‘

!n  !入  =  0

}ou)  !  =  l?}斗  ‘  !  >=  u!6|斗‘  !++  (

}

!}) ___) c( ____(

b]++[  =  !

{

sou) bb+___)v( _(‘

}ou)  !  =  0‘  !  >  入  -  t‘  !++  (

}

}ou)  在  =  !+t‘  在  >  !  +  L  ??  在  >  ‘  ++  ( }

!}) d]b][[ .y  -  d]b]![[ .y  <=  p(

qu?b入

p  =  m!n) p__) S( __(

{

{

u?斗uun  p

{

!n斗  mb!n)(

}

!n  !n

w|!l?) s)bn}) "%p"?n(   !=  0(

}

!}) !n(

qu?b入

}ou)  !  =  0‘  !  >  n‘  !++  (

 

{

scanf("%lf  %lf" ,&p[i] .x ,&p[i] .y); }

sort(p ,p+n ,cmpx);

printf("% .2f\n" ,cloest(0 ,n -1));

}

return  0;

本文含有隐藏内容,请 开通VIP 后查看