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
- 关于分治算法,下列说法中错误的是() {{ 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考前刷题
- 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