CSP-J 模拟10
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分;每题有且仅有一个正确选项)
用C+语言将一个大写字母转换为对应的小写字母(比如将大写字母A转换为小写 字母a),以下哪个代码不正确?( ) {{ select(1) }}
- A.c+=32
- B.c-=32
- C.c-=·
- D.c-=32
2 下列说法中错误的是()。 {{ select(2) }}
- A.栈、队列、树和图都属于数据结构的范畴
- B.CSP-JCSP-S是中国计算机学会举办的程序设计竞赛
- C.背包问题属于动态规划算法中的一种类型
- D.按照分布的地理范围,计算机网络类型可以分为星形、环形和总线型
3下列C++数组的定义中,会丢失数据的是( )。 {{ select(3) }}
- A.char str1[]= ('C','s','P';
- B.int num1[]= (3,6,9;
- C.char str2[]=('CSP-J', 'CSP-S','NOIP';
- D.float num2[]= 1.0,3.0,5.0;
4执行下面的C++代码,输出是()
#include<bits/stdc++.h>
uising namespace std;
int main(){
int tmp = 1;
for(int i=1; i<10;i++)
for(int j=1; j<5; j++)
if(i%)==1)
tmp++;
cout<<tmp;
return 0;
}
{{ select(4) }}
- A.10
- B.11
- C.12
- D.13
- 24位真彩色能表示( )种颜色。 {{ select(5) }}
- A.16 777 216
- B.256
- C.24
- D.65 536
- 以下哪个不属于STL中队列(queue)的操作函数?() {{ select(6) }}
- A.push
- B.pop
- C. empty
- D.top
7.归并排序算法的空间复杂度是( ) {{ select(7) }}
- A.O(logn)
- B.O(n)
- C.O(1)
- D.O(nlogn)
8.下列C++代码执行后不能输出"NOIP”的是()。 {{ select(8) }}
- A.string s("NOIP");cout<<s<<endl;
- B.string S="NOIP";cout<<s<<endl;
- C.string s("NOIP");cout<<s[1]k<s[2]k<s[3]k<s[4]k<endl;
- D.string st"NOIP"];cout<<sk<endl;
9.哈夫曼树的构造用到了( )的算法思想。 {{ select(9) }}
- A.二分查找
- B.搜索回溯
- C.贪心
- D.动态规划
10.在C++语言中,一个字符指针变量char*p占( )字节。 {{ select(10) }}
- A.1
- B.2
- C.8
- D.4
- 某数列有2024个各不相同的单元,由低至高按序排列。现要对该数列进行二分 (binary search)。在最坏情况下,需搜索()个单元。 {{ select(11) }}
- A.2024
- B.11
- C.12
- D.1012
- 在C++程序中,判断a不等于0且b不等于0月c不等于0的正确的条件表达 ()。 {{ select(12) }}
- A.!((a!=0)||(b!=0)|(c!=0))
- B.!((al=0)86(b!=0) 66(c!=0))
- C.a 66 b 68 c
- D.(a=0)66(b=0) 66(c=0)
13.某二叉树有4个结点,则该二叉树的不同形态有( )种。 {{ select(13) }}
- A.12
- B.14
- C.10
- D.16
- 设含有8个元素的集合的全部子集数为S,其中由6个元素组成的子集数为T,则 TS的值为() {{ select(14) }}
- A.7/16
- B.7/64
- C.7/32
- D.21/256
15.对于给定的序列(as),我们把(i.)称为逆序对,当且仅当i<j且a>a。那么序列1 9.2.4.8.6的逆序对有()个。 {{ select(15) }}
- A.7
- B.6
- C.5
- D.4
二、阅读程序(程序输入不超过数组或字符串定义的范围:判断题正确填V,错误填x;除特殊说明外,判断题每题1.5分,选择题每题3分,共计40分)
(1)
#include<bits/stdc++.h>
using namespace std;
int a[10];
void print_num(){
cout<<'1';
for(int i=2;i<=9;++i){
if(a[i]==0)
cout<<'+';
else
cout<<'-';
cout<<i;
}
cout<<"=9"<<endl;
return;
}
int main(){
for(int 1=0; i<=255; i++)f
int k=i, s=1;
for(int j=9;j>=2;j--){
if(k61){
s-=j;
a[j]=1;
}
else{
s+=j;
a[j]=0;
}
k>>=1;
if(s==9)
print_num();if(k61){
s-=j;
a[j]=1;
}
else{
s+=j;
a[j]=0;
}
k>>=1;
if(s==9)
print_num();
}
return 0;
}
判断题 16.将第8行和第10行交换,程序的运行结果不会改变。() {{ select(16) }} 17.将第8行中的'+'改为"+”,程序的运行结果不会改变。() {{ select(17) }} 18.将第20行中的k&1改为k%2,程序的运行结果不会改变。() {{ select(18) }} 19.将第28行中的k>>=1改为k/=2,程序的运行结果不会改变。() {{ select(19) }} 选择题 20.输出数据共有( )行。 {{ select(20) }}
- A.11
- B.10
- C.12
- D.13
21.程序主要用到了( )的算法思想。 {{ select(21) }}
- A.贪心
- B.二分
- C.二进制
- D.动态规划
(2)
#include<bits/stdc++.h>
using namespace std;
stack <char> s;
int main()
{
string a;
int len,mid,next,top;
getline(cin,a);
len=a.length();
mid=len/2-1;
for(int i=0; i<=mid; i++)
s.push(a[i]);
if(len%2==0)
next=mid+1;
else
next=mid+2;
for(int i=next;lc=len-1;i++)
{
if(a[i]!= s.top())
break;
s.pop();
}
if(S.s1ze()==0)
cout<<"yes";
else cout<<"no";
return 0;
}
判断题 22.将第6行中的string a改为char a[256],程序的输出结果不变() {{ select(22) }} 23.即使输人的字符串中间有空格,getline函数也支持相应的处理。 ( ) {{ select(23) }} 24. 将第11行中的int i=0改为int i=1,程序的输出结果不变。 () {{ select(24) }} 25 若输入abc cba,同时将第8行的getline(cin,a)改为cin>>a,程序的输出结果为no。 ( ) {{ select(25) }} 选择题 26.若输出结果为yes,则输入可能为( )。 {{ select(26) }}
- A.abc big big abc
- B.abc big big cba
- C.abc big gib abc
- D.abc big gib cba
27.若输出结果为no,则输入可能为( ) {{ select(27) }}
- A.1234567890987654321
- B.12345 6789899876 54321
- C.12345 678909876 54321
- D.12345 6789009876 54321
(3)
#include<bits/stdc++.h>
using namespace std;
struct node{
int data;
node next;
}
int n,m;
node * head,*,*r;
int main()
{
cin >> n >> m;
head = new node;
head->data= 1;
head->next = NULL;
r = head;
for(int i=2;ic=n;i++)
{
p = new node;
p->data=i;
p->next =NULL;
r->next = P;
r=p;
}
r->next = head;
r = head;
for(int i=1;ic=n;i++)
{
for(int j=1;j<=m-2;j++)
r = r->next;
cout<<r->next->data<<"";
r->next =r->next->next;
r =r->next;
}
return 0;
}
判断题 28.node这个结构体在内存空间中占8字节。() {{ select(28) }} 29.程序中有new却没有做delete,输入n大于10必然会导致程序运行时崩遗。() {{ select(29) }} 30.若输入为85,去掉第15行,程序的运行结果不会改变。() {{ select(30) }} 31.本程序用到了双向链表的技巧。() {{ select(31) }} 选择题 32.若输入为85,则输出是( ) {{ select(32) }}
- A.5 2 7 8 1 4 6 3
- B.5 2 87 1 4 6 3
- C.5 2 8 7 4 1 6 3
- D.5 2 8 7 1 4 3 6
33.若输入为11 4,则输出是( )。 {{ select(33) }}
- A. 4 8 1 6 11 7 3 2 5 10 9
- B.4 8 6 1 11 7 3 2 5 10 9
- C.4 8 1 11 6 7 3 2 5 10 9
- D.4 8 1 6 11 7 2 3 5 10 9
34.(4分)程序运行的时间复杂度是( )。 {{ select(34) }}
- A.O(n)
- B.O(logn)
- C.O(nm)
- D.O(m)
三、完善程序(单选题,每小题3分,共计30分) (1)交叉字符串问题。给出3个字符串s1、s2和s3,判断s3是否可以由s1和52两个字符串经过交叉组合而成,组合过程不能改变字符在s1和s2中的原本顺序。如51=“aabcc",s2="dbbca",s3="aadbbcbcac"或s3="aadbbbaccc"。给了两种3的情况,第一种情况下答案是yes,第二种情况下答案是no,因为找不到任何一种sl和s2的交叉组合方式可以组合成s3。 输入格式: 第1行输入一个整数N。第2行到第N+1行输入3个字符串对s1,s2.s3,s1和2的长度都不超过200,s3的长度等于s1和s2的长度之和。 输出格式: 每个测试样例输出一行,yes代表可以构成,no代表不能。 输入样例: 3 cat tree tcraete cat tree catrtee cat tree cttaree 输出样例: yes yes No
#include <bits/stdc++.h>
using namespace std;
string str1,str2,str;
bool pos;
int vis[205][205];
void dfs(int s1,int s2,int s){
if(s1==str1.length() && s2==str2.length()){
①;
return;
}
if(②)
return;
if(③)
return;
vis[s1][s2]=1;
if(str1[s1]==str[s])
④;
if(str2[s2]==str[s])
dfs(s1,s2+1,s+1);
}
int main()
{
int t,n;
cin>>t;
while(t--){
cin>>str1>>str2>>str;
⑤;
memset(vis,0,sizeof(vis));
dfs(0,0,0);
if(pos)
cout<<"yes"<<endl;
else
cout<<"no"<<endl;
}
return 0;
}
35.①处应填() {{ select(35) }}
- A.pos=true
- B.pos=false
- C.vis[s1][s2]=1
- D.vis[s1][s2]=0
- 2处应填() {{ select(36) }}
- A.str1[51]==str[s] 65 str2[s2]!=str[s]
- B str1[51]!=str[s] 56 str2[s2]!=str[s]
- C.str1[s1]!=str[s]66str2[s2]==str[s]
- D.str1[s1]==str[s] 66 str2[s2]==str[s]
37.③处应填()。 {{ select(37) }}
- A.vis[s1][s2]
- B.vis[s1][s2]==0
- C.pos==true
- D.pos==false
38.④处应填()。 {{ select(39) }}
- A.dfs(s1,S2,S+1)
- B.dfs(S1+1,s2+1,s)
- C.dfs(s1+1,s2,S+1)
- D.dfs(s1+1,s2+1,S+1)
39.⑤处应填( )。 {{ select(40) }}
- A.vis[51][52]==1
- B.vis[s1][s2]==0
- C.pos==true
- D.pos==false
(2)设有N堆沙子排成一排,编号为12,·,N(N小于1000),每堆沙子有一定的数量, 用a]表示第K堆沙子的数量值。现在要将N堆沙子归并成为一堆,归并的过程为 每次只能将相邻的两堆沙子堆成一堆,合并后的这堆沙子的代价为这两堆沙子的数 值和,这样经过N-1次归并之后,最后成为一堆。不同的归并方案的总代价值是不同 的。现给出N堆沙子的数量后,请找出一种合理的归并方法,使总的归并代价最小。输入格式: 输入有n+1行,第1行为n的值,从第2行开始,为n个正整数,表示各堆沙 子的数量值。 输出格式: 只有一行,表示最小的总代价,结果保证小于2 输人样例: 10 12 3 13 8 23 14 9 34 输出样例: 398
#include <bits/stdc++.h>
using namespace std;
int main()
{
int a[105],s[105],f[100][100];
int j,n,p,m;
cin>>n;
s[0]=0;
for(int i=1;i<=n;i++){
cin>>a[i];
①;
f[i][i]=0;
}
for(p=1;p<=n-1;p++)
for(int i=1;icn;i++){
②;
if(j<=n)
{
m=INT_MAX;
for(int k=i;k<j;k++)
m=min(m,③);
④;
}
}
cout<<⑤;
return 0;
}
40.①处应填() {{ select(40) }}
- A.s[i]=s[1-1]+a[i-1]
- B.s[i]=s[i-1]+a[i]
- C.s[i]=s[i-1]+a[i+1]
- D.s[i]=min(s[1-1],a[i])
41.②处应填()。 {{ select(41) }}
- A.j=1+p
- B.j=i+p-1
- C.j=i+p+1
- D.j=max(i,p)
- ③处应填() {{ select(42) }}
- A.f[i][k]+ f[k+1][j]
- B.f[i][k]+f[k][j]
- C.f[i][k-1]+f[k+1][j]
- D.f[i][k+1]+f[k+1][j]
43.④处应填( )。 {{ select(43) }}
- A.f[i][j] = m + s[j]- s[i]
- B.f[i][j]=m+ s[j]-s[i-1]
- c.f[i][j] =m+ s[j-1]- s[i]
- D.f[i][j] = m + s[j-1]- s[i-1]
4.⑤处应填( )。 {{ select(44) }}
- A.f[0][n]
- B.f[0][n-1]
- C.f[1][n]
- D.f[1][n-1]
[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