Type: Objective

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
  1. 24位真彩色能表示( )种颜色。 {{ select(5) }}
  • A.16 777 216
  • B.256
  • C.24
  • D.65 536
  1. 以下哪个不属于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
  1. 某数列有2024个各不相同的单元,由低至高按序排列。现要对该数列进行二分 (binary search)。在最坏情况下,需搜索()个单元。 {{ select(11) }}
  • A.2024
  • B.11
  • C.12
  • D.1012
  1. 在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
  1. 设含有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
  1. 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)
  1. ③处应填() {{ 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考前刷题

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