2020CSP-J3

亡梦爱人 提交于 2020-10-05 09:08:25

2020CSP-J3

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

1、文件型病毒传染的主要对象是()
A.文本文件
B.系统文件
C.可执行文件
D. .EXE 和.COM文件
2、24 针打印机的分辨率约为180dpi. Dpi 数越大,打印精度越高。其中单位dpi是指()
A.印点/厘米
B.印点/毫米
C.印点/英寸
D.印点/寸
3、内存地址的最重要特点是()
A.随机性
B.唯一性
C.顺序性
D.连续性
4、多媒体计算机是指()
A.具有多种功能的计算机
B.具有多种外设的计算机
C.能处理多种媒体的计算机
D.能借助多种媒体操作的计算机
5、最早的计算机的用途是用于()
A.科学计算
B.自动控制
C.系统仿真
D.辅助设计
6、CPU中()机构相当于运算器中的一个存储单元,它的存取速度比存储器要快得多。
A.存放器
B.辅存
C.主存
D.寄存器
7、计算机软件我们一般指的是()
A.系统软件和实用软件
B.实用软件和自由软件
C.培训软件和管理软
D.编辑软件和科学计算软件
8、操作系统在第几代计算机开始应用()
A.第一代
B.第二代
C.第三代
D.第四代
9、计算机中的数有浮点与定点两种,其中用浮点表示的数,通常由( )这两部分组成()
A.指数与基数
B.尾数与小数
C.阶码与尾数
D.整数与小数
10.如果用一个字节来表示整数,最高位用作符号位,其他位表示数值。例如: 0000001 表示+1,1000001 表示-1,试问这样表示法的整数A的范围应该是(      )
A. -127<=A<=127		B. -128<=A<=128		C. -128<=A<128		D. -128<=A<=127
11.下列叙述中,正确的是(    )
A.线性表的线性存储结构优于链表存储结构
B.队列的操作方式是先进后出
C.栈的操作方式是先进先出
D.二维数组是指它的每个数据元素为一个线性表的线性表
12.用某种排序方法对线性表25,84,21,47,15,27,68,35,20进行排序,结点变化如下:
	(1)25,84,21,47,15,27,68,35,20;(原始)
	(2)20,15,21,25,47,27,68,35,84;
	(3)15,20,21,25,35,27,47,68,84;
	(4)15,20,21,25,27,35,47,68,84.
那么,排序方法是()
A. 选择排序			B. 希尔排序			C. 合并排序			D. 快速排序
13.如果某二叉树的前序为STUWV, 中序为UWTVS,那么该二叉树的后序是()
A. WUVTS			B. UWVTS			C. VWUTS			D. WUTSV
14.下面关于数据结构的叙述中,正确的叙述是()
A.顺序存储方式的优点是存储密度大,且插入、删除运算效率高
B.链表中的每一个结点都包含一个指针
C.包含n个结点的二叉排序树的最大检索长度为log(2n)
D.将一棵树转换为二又树后,根结点没有右子树
15.表达式(1+34)*5-56/7的后缀表达式为()
A.1 34+5 56 7-*/       
B.-*+1 34 5/56 7
C.1 34 +5*56 7/-
D.1 34 5* +56 7/

二、阅读程序(程序输入不超过数组或字符串定义的范围;判断题正确填 T,错误填F;除特殊说明外,判断题1.5分,选择题4分,共计40分)
1) 汉诺塔问题:古代有一个梵塔,塔内有三个座A、B、C,A座上有n个盘子,盘子大小不等,大的在下,小的在上.有一个和尚想把这n个盘子从A座移到B座,但每次只能允许移动一个盘子,并且在移动过程中,3个座上的盘子始终保持大盘在下,小盘在上,程序如下:
1.#include <iostream>
2.using namespace std;
3.void hanoi(int n,char a,char b,char c){
4.  if(n==1)
5.    cout<<n<<" "<<a<<" "<<c<<endl;
6.  else{
7.    hanoi(n-1,a,c,b);
8.    cout<<n<<" "<<a<<" "<<c<<endl;
9.    hanoi(n-1,b,a,c);
10.  }
11.}
12.int main(){
13.  int n;
14.  cin>>n;
15.  hanoi(n,'A','B','C');
16.  return 0;
17.}
判断题
16.(1分)当n≥0时,程序不会出现死循环。 
17.(1分)输出共有n行。	
18. 当n > 0时,将第4行的“==”改为“<=”,程序输出必定不变。 
19. 将第5行的“n”改为“1”,程序输出结果必定不变。
选择题
20.(3分)此程序的时间复杂度是(   )
A. O(n)				B. O(n^2)				C. O(n^3)				D. O(2^n)
21. 若要求程序输出不超过15行,则下列哪个n的值是合法的(   )
A. 0					B. 4					C. 5					D. 6

2)
1.#include <cstdio>
2.#define N 1005
3.
4.using namespace std;
5.int num[N];
6.
7.int main(){
8.  int al=1,n,x;
9.  scanf("%d",&n);
10.  num[1]=1;
11.  for(int i=1;i<=n;++i){
12.    x=0;
13.    for(int j=1;j<=al;++j){
14.      num[j]=num[j]*5+x;
15.      x=num[j]/10;
16.      num[j]%=10;
17.    }
18.    if(x>0) num[++al]=x;
19.  }
20.  printf("0.");
21.  for(int i=al;i<n;++i){
22.    putchar('0');
23.  }
24.  for(int i=al;i>=1;i--){
25.    printf("%d",num[i]);
26.  }
27.  putchar('\n');
28.  return 0;
29.}
判断题
22.(1分)程序输出的是5^n的值。   
23.(1分)程序执行到第27行时,i的值为1。   
24. 对于任意1≤i≤al,都有0≤num≤9。 
25. 程序输出的是一个小数,且小数末尾可能有多余的0。
选择题
26. 此程序的时间复杂度是(   )
A. O(n)				B. O(n^2)				C. O(n^3)				D. O(n log n)
27. 若n=3,则输出为(   )
A. 8					B. 0.125				C. 0.8				D. 125

3) 在起点和终点之间,有N块岩石(不含起点和终点的岩石)。在比赛过程中,选手们将从起点出发,每一步跳向相邻的岩石,直至到达终点。
     为了提高比赛难度,组委会计划移走一些岩石,使得选手们在比赛过程中的最短跳跃距离尽可能长。由于预算限制,组委会至多从起点和终点之间移走M块岩石(不能移走起点和终点的岩石)。
    输入文件第一行包含三个正整数L, N, M,分别表示起点到终点的距离,起点和终点之间的岩石数,以及组委会至多移走的岩石数。
     接下来N行,每行一个整数,第i行的整数a[i] (0 < a[i] < L)表示第i块岩石与起点的距离。这些岩石按与起点距离从小到大的顺序给出,且不会有两个岩石出现在同一个位置。
     输出文件只包含一个整数,即最短跳跃距离的最大值。
1.#include <iostream>
2.using namespace std;
3.int l,n,m,a[50005],ans;
4.bool check(int dis)
5.{
6.  int count=0,last=0;
7.  for(int i=1;i<=n;i++)
8.    if(a[i]-last<dis) count++;
9.      else last=a[i];
10.  if (count>m) return 0;return 1;
11.}
12.int main()
13.{
14.    ios::sync_with_stdio(0);
15.    cin>>l>>n>>m;
16.    for(int i=1;i<=n;i++)
17.      cin>>a[i];
18.    a[n+1]=l;
19.    int fl=0,fr=l;
20.    while(fl<=fr)
21.    {
22.      int mid=(fl+fr)/2;
23.      if(check(mid)) fl=mid+1,ans=mid;
24.      else fr=mid-1;
25.    }
26.    cout<<ans;
27.    return 0;
28.}
判断题
28.(1分)将第19行的“fl=0”改为“f1=1”,程序输出结果必定不变。 
29.(2分)程序执行到第26行时,必有fl>fr。  
30.(2分)若第23行执行的check(mid)==1, 则最终的ans≤此时的mid。  
31.(2分)程序执行到第10行时,count 的值表示:如果最短跳跃距离恰好为dis,那么最少需要移走几块岩石。    
选择题
32. 此程序的时间复杂度是(    )
A. O(n^ 2)				B. O(nl)				C. O(n log l)			D. O(n log n)
33. 若输入为:
25 5 2
2
11
14
17
21
则输出为(    )
A. 3 					B. 4					C. 5					D. 6

三、完善程序(每小题3分,共计30分)
1)  迪杰斯特拉算法是由荷兰计算机科学家狄克斯特拉于1959年提出的,因此又叫狄克斯特拉算法。是从一个顶点到其余各顶点的最短路径算法,解决的是有向图中最短路径问题。迪杰斯特拉算法主要特点是以起始点为中心向外层层扩展,直到扩展到终点为止。
1.#include<iostream>
2.using namespace std;
3.int main()
4.{
5.  int edgs;
6.  int points;
7.  int dis[10];
8.  int flag[10];
9.  int infinity=9999999;
10.  cin>>points>>edgs;
11.  int edg[10][10];
12.  for (int i=1;i<=points;i++)//初始化
13.  {
14.    for(int j=1;j<=points;j++)
15.    {
16.      if(i==j)
17.      {
18.        edg[i][j]=  ①  ;
19.      }
20.      else
21.      {
22.        edg[i][j]=  ②  ;
23.      }
24.    }
25.  }
26.  int point1,point2,quanzhi;
27.  for(int i=1;i<=edgs;i++)
28.  {
29.    cin>>point1>>point2>>quanzhi;
30.    edg[point1][point2]=  ③  ;
31.  }
32.  for(int i=1;i<=points;i++)
33.  {
34.    dis[i]=edg[1][i];
35.  }
36.  for(int i=1;i<=points;i++)
37.  {
38.    flag[i]=0;
39.  }
40.  flag[1]=1;
41.  int min,u;
42.  for(int i=1;i<=points-1;i++)
43.  {//从源点到源点不用比较,因此总的次数少一次
44.    min=infinity;
45.    for (int j=1;j<points;j++)
46.    {
47.      if (flag[i]==0&&dis[j]<min)
48.      {//核心思想:依次比较出离源点最近的点
49.        min=  ④  ;
50.        u=j;
51.      }
52.    }
53.    flag[u]=1;
54.    for(int v=1;v<=points;v++)
55.    {//找出离源点最近的点更新dis里面的源点到各个点的值是否最小
56.      if (edg[u][v]<infinity)
57.      {
58.        if (dis[v]>dis[u]+edg[u][v])
59.        {
60.          dis[v]=   ⑤   ;
61.        }
62.      }
63.    }
64.  }
65.  for(int i=1;i<=points;i++)
66.  {
67.    cout<<dis[i]<<" ";
68.  }
69.  cout<<endl;
70.}
34.①处应填(    )
A. infinity			B. dis[j]				C. 0					D. 1
35.②处应填(    )
A. infinity			B. dis[j]				C. 0					D. 1
36.③处应填(    )
A. quanzhi			B. 0					C. infinity			D. 1
37.④处应填(    )
A. j					B. dis[j]				C. flag[j]				D. i
38.⑤处应填(    )
A. dis[u]				B. edg[u][v]			C. dis[u]+edg[u][v]	D. infinity

2)完全背包问题
     容量为10的背包,有5种物品,每种物品数量无限,其重量分别为5, 4, 3, 2,1,其价值分别为1,2,3,4,5。
     设计算法,实现背包内物品价值最大。代码如下(输出50)
1.#include<iostream>
2.#include<algorithm>
3.
4.using namespace std;
5.
6.int main()
7.{
8.  int total_weight=10;
9.  int w[6]={0,5,4,3,2,1};
10.  int v[6]={0,1,2,3,4,5};
11.  int dp[11]={  ①  };
12.
13.  for(int i=1;i<=  ② ;i++)
14.    for(int j=w[i];j<= ③ ;j++)
15.      dp[j]= ④ ;
16.  
17.  cout<< ⑤ <<endl;
18.  return 0;
19.}

39.①处应填(    )
A. 0				B. 5				C. 10			D. 15
40.②处应填(    )
A. 5				B. 6				C. 10			D. 15
41.③处应填(    )
A. 5				B. 6				C. 10			D. 15
42.④处应填(    )
A.dp[j]+v[i]
B.dp[j-w[i]]+v[i]
C.min(dp[j],dp[j-w[i]]+v[i])
D.max(dp[j],dp[j-w[i]]+v[i])
43.⑤处应填(    )
A. v[10]			B. dp[10]		C.w[10]			D. total_weight

 

要答案的可以私聊我^_^

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!