Type: Objective

CSP-J 模拟8

You cannot submit for this problem because the contest is ended. You can click "Open in Problem Set" to view this problem in normal mode.

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

1.在C++语言中,以下哪种方式不能用于向函数传递参数?() {{ select(1) }}

  • A.值传递
  • B.模板传递
  • C.引用传递
  • D.指针传递

2.以下关于算法的描述中正确的是()。 {{ select(2) }}

  • A.算法是为解决问题而编制的计算机程序
  • B.算法是为解决问题而采用的计算机程序设计语言
  • C.算法是为解决问题而采用的计算方法
  • D.算法是为解决问题而采取的方法与步骤

3.在关系数据库中,存放在数据库中的数据的逻辑结构以( )为主。 {{ select(3) }}

  • A.二维表
  • B.二叉树
  • C.哈希表
  • D.邻接表

4.设某算法的时间复杂度函数的递推方程是T(n)=T(n-1)+n(n为正整数)及T(0)=1, 则该算法的时间复杂度为( )。{{ select(4) }}

  • A. O(logn)
  • B.O(n)
  • C.O(n)
  • D.O(nlogn)

5.在C++语言中,一般提到的“空间复杂度”中的“空间”是指()。 {{ select(5) }}

  • A.程序运行时所占的内存大小
  • B.程序运行时所占的数组大小
  • C.程序运行时所占的硬盘大小
  • D.程序源文件所占的硬盘大小

6.2017年9月30日是星期六,1999年9月30日是( )。 {{ select(6) }}

  • A.星期三
  • B.星期六
  • C.星期五
  • D.星期四

7.设栈S的初始状态为空,元素1,2、3、4.5依次入栈,以下出栈序列中不可能出现的 是( )。 {{ select(7) }}

  • A.1,2,3,5,4
  • B.2,3,1,5,4
  • C.1,5,3,2,4
  • D.4,3,5,2,1
  1. 关于分治算法,下列说法中错误的是() {{ select(8) }}
  • A.分治算法的核心思想是分而治之,把问题转化为多个规模更小的子问题再
  • B.分治算法可以不使用递归实现
  • C.分治算法的时间复杂度是 O(logn),其中n表示问题的规模
  • D.二分法、快速排序等算法都是使用分治思想的典型算法

9.如下代码主要表示什么数据结构? {{ select(9) }}

typedef int LTDataType;
typedef struct ListNode
{
	struct ListNode*prev;
    struct ListNode*ext;
    LTDataType data;
    LTNode;
}
  • 单向链表
  • B.双向链表
  • C.循环链表
  • D.优先队列

10.使用如下代码片段定义4个字符串(假设头文件已正确定义),以下说法中错误的是 ( )。 {{ select(10) }}

string strl="csp";
string str2 = str1;
char str3[]="csp";
char *str4 = str3;
  • 对于4个字符串,都可以使用std::cout输出其中的内容(例如,cout<<str3;
  • str3只占用4字节内存,但str1要占用更多内存
  • 由于str2由str1直接赋值得到,因此二者指向同一块内存、即修改str1的内容后str2的内容也会随之改变
  • 由于str4由str3直接赋值得到,因此二者指向同一块内存,即修改str3的内容后str4的内容也会随之改变

11.冯·诺依曼体系结构中组成计算机的五大部件是() {{ select(11) }}

  • 总线、处理器、存储器、输入设备、输出设备
  • 处理器、运算器、存储器、输入设备、输出设备
  • 总线、控制器、存储器、输入设备、输出设备
  • 控制器、运算器、存储器、输入设备、输出设备

12.如下代码对树的操作是( )。{{ select(12) }}

void postorder(tree bt)
{
	if(bt){
		postorder(bt->lchild);
    	postorder(bt->rchild);
    	cout << bt->data;
	}
}
  • 后序遍历
  • B.中序遍历
  • C.前序遍历
  • D.层次遍历

13.有规格尺寸相同的5种颜色的手套(不分左右)各15只混装在箱子里,从中至少取 出多少只,才能保证配出3副颜色相同的手套?() {{ select(13) }}

  • 8
  • B.9
  • C.10
  • D.11

14.由3个a、5个b和2个c构成的字符串中,包含子串"abc"的共有( )个。 {{ select(14) }}

  • 39 600
  • B.780
  • C.840
  • D.260

15.1GB代表的字节数量是() {{ select(15) }}

  • 21°
  • B.220
  • C.220
  • D.2“0

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

(1)

#include<bits/stdc++.h>
using namespace std;
const int SIZE = 25;
int n,k,a[SIZE];
int cnt=0;
long long ans;
bool isPrime(int n)
{
	cnt++;cout<<cnt<<endl;
	if(n<=1) return false;
	for(int i=2;i*i<=n;++i)
		if(0==n%i)
			return false;
	return true;
}	
void dfs(int m, int sum, int x){
	if(m==k)
	{
		if(isPrime(sum))
			ans++;
	return;
	}
	for(int i=x;icn;++i)
		dfs(m+1,sum+a[i],i+1);
	return;
}
int main()
{
	cin >> n >>k;
	for (int i = 0; i< n;++i)
		cin >> a[i];
	dfs(0,0,0);
	cout << ans <<endl;
	return 0;
}

判断题

16.将第13行中的i*ic=n改为ic=sqrt(n),程序的运行结果不会改变 (){{ select(16) }} 17.将第14行中的1f(0n%1)改为if(n%i0),程序的运行结果不会改变() {{ select(17) }} 18.若输入k值比n大,则程序会死循环,无输出() {{ select(18) }} 19.将第29行中的sum+a[i]改为sum+=ali],程序的运行结果不会改变() {{ select(19) }}

选择题

20.若输入k的值为6. 且输入n>=k,a数组的元素均为相等的正整数,则输出为() {{ select(20) }}

  • A.0
  • B.2
  • C.4
  • D.8

21.若输入12 8,则isPrime 被调用的次数为()。 {{ select(21) }}

  • A.4
  • B.66
  • C.132
  • D.495

(2)

#include <bits/stdc++.h>
using namespace std;
int CNT, P;
int check(int tmp, int n)
{
	int res = 0;
	for(int i=tmp; i>0; i--)
	{
		res += n;
		int a=0,ans=res;
		while(ans%n == 0)
			a++,ans/=n;
		i -= a-1;
	}
	
	
	return res;
}


int main()
{
	cin >> CNT;
	while(CNT--)
	{
		int ans=1;
		cin >> p;
		for(int i=2; ic=sqrt(p); i++)
		{
			int tmp=0;
			while(p%i == 0)
				tmp++,p/=i;
			
			if(tmp)
				ans = max(ans,check(tmp,i));
		}
		ans = max(ans,p);
		cout<<ans<<endl;
	}
	
	return 0;

}

判断题 22.若输入12,程序的输出会报错。 {{ select(22) }} 23.若将第27行中的while改为if,程序的输出结果不变。 {{ select(23) }} 24.若输入p是一个素数,则程序中的第30行不会被执行。 {{ select(24) }} 25.若输入p是一个素数,则输出ans的值为p。 {{ select(25) }} 选择题 26.若输入1 36,则输出为( ) {{ select(26) }}

  • 36
  • B.6
  • C.4
  • D.9

27.若tmp< n,则返回的res 结果为( )。 {{ select(27) }}

  • A.n
  • B.tmp
  • C.tmp*n
  • D. tmp+n

(3)

#includeciostream>
#include<string>
#includecset>
using namespace std;
string a, s[105];
int cnt=0;
sete<string>dict;
void trim(string &s)
{
	if(Is.empty())
	{
		s.erase(0,s.find_first_not_of(""));
		s.erase(s.find_last_not_of("")+1);
	}


}

int main()
{
	cin>>a;
	while(a!="#")
	{
		int length = a.length();
		for(int i=0;i<length;i++)
		{
			if(isalpha(a[i]))
				a[i] = tolower(a[i]);
			else
				a[i]=’’;
		}
		
		trim(a);
		s[cnt]=a;
		dict.insert(a);
		cnt++;
		cin>>a;
	}
	for(set<string>::iterator it=dict.begin();it!=dict.end();++it)
		cout << *it << "";
	return 0;
}

判断题 28.STL中的set属于关联式容器。 () {{ select(28) }} 29.若将第6行中的int cnt=0替换为int cnt,程序的运行结果不会改变。 ( ) {{ select(29) }} 30.若将第21行中的a.length()替换为a.size(),程序的运行结果不会改变。 () {{ select(30) }} 31. 若输入 34 12 56 #,则程序输出 12 34 56。 {{ select(31) }} 选择题 32 若输入为A Dream Is To Build A Big Big World #,则输出是( )。 {{ select(32) }}

  • A Dream Is To Build A Big Big World
  • a dream is to build a big big world
  • a big build dream is to world
  • A Big Build Dream Is To World

33.入为WorlaYimu AsiaShanghai ChinaHangzhou ZhejiangJinhua #,则输能是( )。 {{ select(33) }}

  • Worldrimu AsiaShanghai ChinaHangzhou ZhejiangJinhua
  • B.worldyiwu asiashanghai chinahangzhou zhejiangjinhua
  • C.AsiaShanghai ChinaHangzhou WorldYiwu ZhejiangJinhua
  • D.asiashanghai chinahangzhou worldyiwu zhejiangjinhua 34.(4分)若输入为I am 12 years old.#,则输出是( )。 {{ select(34) }}
  • A.am i old years
  • B.am I old years
  • C.I am years old.
  • D.I am 12 years old.

三、完善程序(单选题,每小题3分,共计30分) (1)假设有一个无向图,将这个无向图的某一条欧拉路或者欧拉回路用算法实现并打印出来 输入格式: 第1行是n和m,表示有n个点和m条边,以下m行描述每条边连接的两点输入样例: 55 12 23 34 45 51 输出格式: 欧拉路或欧拉回路 输出样例: 154321

#includecbits/stdc++.h>
using namespace std;
#define MAXN 105
int g[MAXN][MAXN];
int du(MAXN);
int CirCuit[MAXN];
int n,e,circultpos.x.v,start;
void fied circuit(int 1)
{
	for fint )=1;)c=n; js*)
		if(①)
		{
			g[j][i]= 0;
			g[i][j]= 0;
			nd_circuit(j);
		}
	②;
}

 int main()
{
	memset(g,0,sizeof(g));
	cin >> n >> e;
	for (int i=1; i<= e;i++)
	{
		cin >>x>> y;
		g[y][x]=1;
		③;
		du[x]++;
		du[y]++;
	}
	start = 1;
	for (int i=1; i <= n; i++)
		if(④)
			start = i;
	circuitpos = 0;
	
	
	for (int i = 1; i <= circuitpos; i++)
		cout << circuit[i] <<'';
	
	cout << endl;
	return 0;
}

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

  • A.g[i][j] == 0
  • B.g[i][j]== 1
  • C.du[i]==1
  • D.du[j]==1

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

  • A.circuit[++circuitpos]= i
  • B.circuit[circuitpos]= i
  • D.circuit[i]=j
  • C.circuit[j]=i

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

  • A.start=1
  • B.start=0
  • C.g[x][y]=1
  • D.g[x][y]=0

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

  • A.g[i][j]%2 == 0
  • B.g[i][j]%2 == 1
  • C.du[i] % 2 == 0
  • D.du[i] %2 == 1

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

  • A.find_circuit(0)
  • B.find_circuit(start)
  • C.find_circuit(1)
  • D.find_circuit(n)

(2)设一棵n结点的二叉树tree的中序遍历为(1,2,3.··n),其中数字1,23,···n为结点编 号。每个结点都有一个分数(均为正整数),记第i个结点的分数为d,tree及它的 每棵子树都有一个加分,任意一棵子树subtree(也包含tree本身)的加分计算方法 如下: subtree的左子树的加分×subtree的右子树的加分+subtree的根的分数若某棵子树为空,规定其加分为1。叶子的加分就是叶子结点本身的分数,不考虑它的空子树。试求一棵符合中序遍历为(1.2.3··)日加分最高的二叉树 tree要求输出:(1)tree的最高加分;(2)tree的前序遍历 输入格式: 第1行是一个整数n,为结点个数。第2行是》个用空格隔开的整数,为每个 结点的分数(0<分数<100) 输出格式: 第1行是一个整数,为最高加分(结果不会超过int范围)第2行是n个用空 格隔开的整数,为该树的前序遍历。如果存在多种方案,则输出字典序最小的 方案。 数据范围: n<30 输入样例: 571210 输出样例: 145 31245

#includecbits/stdc++.h>
using namespace std;
const int N=30;
int n, w[N], f[N][N], rt[N][N];
void print(int l, int r)
{
	if(l> r)
		return;
	①;
	printf("%d",root);
	12
	②;
	print(root+1,r);
}
int main()
{
	memset(f,0,sizeof(f));
	scanf("%d",&n);
	for (int i=1; ic=n;++i)
	{
		scanf("%d",6w[i]);
		③;
		rt[i][i]= i;
	}
	
	for (int l=n; l>=1; 1--)
		for(int r=l+1; r<=n; r++)
			for(int root=l; root<=r; root++)
			{
				int lw=f[l][root-1];
	
				④;
				if(lw == 0)
					lw= 1;
				if(rw == 0)
					rw= 1;
				if(⑤)
				{
					f[l][r]= lw*rw+w[root];
					rt[l][r]= root;
				}
			}	
	printf("%d\n",f[1][n]);
	print(1, n);
	printf("\n");
	return 0;
}

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

  • A. int root =0
  • B. int root 1
  • C. int root rt[l][r]
  • D. int root rt[1][n]

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

  • A. print(1, root-1)
  • B. print(l, root-1)
  • C. print(1, root)
  • D. print(l, root)

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

  • A.f[i][i] = 0
  • B.f[i][i] = 1
  • C. f[i][i] i
  • D.f[i][i]= w[i]

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

  • A. int rw=f[root][r]
  • B.int rw=f[root+1][r]
  • C. int rw=f[root][n]
  • D. int rw=f[root+1][n]

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

  • A. lw*rw+w[ root] f[l][r]
  • B.lw*rw+w[root] f[l][r] D.lw*rw+w[root] f[1][n]
  • C. lw*rw+w[ root] f[1][n]
  • D.lw*rw+w[root] f[1][n]

[2024笔试] CSP - J考前刷题

Not Attended
Status
Done
Rule
OI
Problem
10
Start at
2024-8-12 4:30
End at
2024-8-12 5:30
Duration
1 hour(s)
Host
Partic.
2