Type: Objective

CSP-J 模拟5

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. 十进制数2024的八进制表示是( )。 {{ select(1) }}
  • A.3749
  • B.3750
  • C.3751
  • D.3752

2.以下关于计算机协会竞赛的描述正确的是()。 {{ select(2) }}

  • A.NOI国家集训队每年产生4名选手代表中国参加IOI
  • B.CSP-J/CSP-S是2018年开始举办的
  • C.USACO晋级白金的选手可以直接参加 NOIP
  • D.ACSL 和NOIP都是CCF旗下的程序设计赛事

3.以下哪个可以用作C++程序中的变量名?() {{ select(3) }}

  • A.public
  • B.loops
  • C.new
  • D.delete

4.以下哪个数据结构不属于线性结构?(){{ select(4) }}

  • A.栈
  • B.数组
  • C.树
  • D.链表

5.以下哪个属于STL 函数?() {{ select(5) }}

  • A.main
  • B.sort
  • C.freopen
  • D.scanf

6.小明用递归的方法写了一个斐波那契数列的程序,在这里递归函数经常用到的数据 结构是( )。 {{ select(6) }}

  • A.树
  • B.栈
  • C.链表
  • D.队列

7.堆排序程序运行的时间复杂度是() {{ select(7) }}

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

8.在下列排序算法中,( )是稳定的排序算法。 {{ select(8) }}

  • A.归并排序
  • B.快速排序
  • C.选择排序
  • D.拓扑排序
  1. 一台32位操作系统的计算机运行C++,下面哪个说法是正确的?() {{ select(9) }}
  • A.C++语言中的一个int类型的变量占8字节
  • B.C++语言中的一个指针类型的变量占4字节
  • C.C++语言中的一个bool类型的变量占2字节
  • D.C++语言中的一个double类型的变量占4字节

10.设全集I=fa,b.c,d.e.fg.h),集合BUA=fa,b,c,d,e,f,CnA=(c,d,e,~BNA=(a,d) 那么集合CnBDA为()。 {{ select(10) }}

  • A.(c,e)
  • B.(d,c)
  • C.(e)
  • D. c,d,e
  1. 在不大于19000的正整数中,与19000互质的正整数有( )个。 {{ select(11) }}
  • A.9500
  • B.9498
  • C.9497
  • D.9499

12.假设P=true,Q=false,R=true,S=true,逻辑运算表达式PAQVRAS的值是( )。 {{ select(12) }}

  • A.true
  • B. false
  • C.null
  • D. NIL

13.对于二叉树T,已知其前序遍历序列为1243576,中序遍历序列为4215 73 6. 则其后序遍历序列为( )。 {{ select(13) }}

  • A.4257631
  • B.4275631
  • C.4275361
  • D.4723561

14.一个口袋内装有大小相同的7个白球和2个黑球,从口袋中取出3个球,使其中不 含黑球,有多少种取法?() {{ select(14) }}

  • A.32
  • B.35
  • C.24
  • D.56

15.在下图中,从顶点( )出发存在一条路径可以遍历图中的每条边一次,而且仅遍历一次。 {{ select(15) }}

  • A.B点
  • B.A点
  • C.E点
  • D.C点

image

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

(1)

#include<bits/stdc++.h>
using namespace std;
int a[100005];
bool judge(int x)
{
	int i=2;
	if(x==0||x==1)
		return false;
	while( i <= floor(sqrt(x)) 88(×%i!=0))
		i++;
	if(i> floor(sqrt(x)))
		return true;
	return false;
}

int inverted(int n)
{
	int sum;
	sum = 0;
	while(n > 0)
	{
		sum = sum*10 + n%10;
		n /= 10;
	}
	return sum;

}
int main()
{
	int m,n,k;
	bool flag;
	k=0;
	flag = false;
	cin >> m >> n;
	for(int i=m; i<=n; i++)
		if( judge(i) 88 judge(inverted(i)))
		{
			k++;
			a[k]= i;
			flag = true;
		}
	
	if(flag)
	{
		for(int i=1; ick; i++)
		cout << a[i] << ",";
		cout << a[k] << endl;
	}
	else
		cout<< "No"<< endl;
	return 0;
}

判断题

16.若去掉第6行,程序的输出结果不受任何影响 () {{ select(16) }}

  • true
  • false

17.若去掉第8行,程序的输出结果中的数字总数不变。 () {{ select(17) }}

  • true
  • false

18.程序的输出结果是一个从小到大排列的整数序列。 () {{ select(18) }}

  • true
  • false

19.将第10行中的s.size()替换成s.length(),程序的运行结果不会改变。() {{ select(19) }}

  • true
  • false

选择题

20.将第13行s.insert(k)替换成for(int izl;ic=6;i++)s.insert(i),则输出 为( )。 {{ select(20) }}

  • A.1 2 3 4 5 6
  • B.654321
  • C.1236 54
  • D.1-6随机分布值

21、将第 13 行 s.insert(k)替换成for(int i=l;icn7;i++) s.insert(i),第20 行替换为int x=i+1,第21行替换为int y=i,则输出为( )。 {{ select(21) }}

  • A.123456
  • B.6 5432 1
  • C.2 345671
  • D.2 3 4 56 7

(2)

#includecbits/stdc++,h>
using namespace std;
int month[13]=f-1,31,28,31,30,31,30,31,31,30,31,30,311;
int date,ans1,ans2,y,m,d;
bool check1(int date)
{
	char s[32];
	sprintf(s, "%d", date);
	if(s[0]==s[7] 88 s[1]==s[6] 88 s[2]==s[5] 88 s[3]==s[4])
		return true;
	return false;
}


bool check2(int date)
{
	char s[32];
	sprintf(s,"%d",date);
	if(s[0]==s[2] 88 s[0]==s[5] 68 s[0]==s[7] 88 s[1]==s[3]
	 s[1]==s[4] 88 s[1]==s[6])
		return true;
	return false;
}

int main()
{
	cin>>date;
	y=date/10000;
	m=date/100%100;
	d=date%100;
	for(int i=y;;i++)
		if(1%400==0 1 (1%100!=0 88 1%4==0))
			month[2]= 29;
	else
		month[2]= 28;
	int j=(i==y)?m:1;
	for(;j<=12;j++)
	{
		int k=(i==y 88 j==m)?d+1:1;
		for(;k<=month[j];k++)
		{
			int date=i*10000+j*100+k;
			if(check1(date) &8 ans1==0)
				ans1=date;
			if(check2(date))
				return cout<<ans1<<""<<dateccendl,0;
		}
	}
	return 0;
}

注:输入为8位数字。 判断题 22.将第3行中的-1改为0,程序的运行不受任何影响。 () {{ select(22) }} 23. 去掉第15行中的88 s[1]s[4] &8 s[1]s[6],程序的输出不变。 () {{ select(23) }} 24.将第23 行m=date/100%100替换为m=date%10000/100,程序的输出不变。 ( ) {{ select(24) }} 25.将第30行改为int j;if(iy 88 j1 || il=y 88 j==0)j=m,程序的输 出不变。 ( ) {{ select(25) }} 选择题 26. 若输入20240204,则输出为( )人 {{ select(26) }}

  • A.20240204 20300302
  • B.20300302 20400402
  • C.20400402 21211212
  • D.20300302 21211212

27.若输出20011002 20200202,则输入可能为() 人 {{ select(27) }}

  • A.20011002
  • B.20001001
  • C.20020101
  • D.20020202

(3)

#include<bits/stdc++.h>
using namespace std;
const int MAXN = 100;
bool Prime_Number_Judge(const int &num){
	if (num <= 3)
		return num > 1;
	for (int i = 2; i < num; i++)
		if (num % i == 0)
			return false;
	return true;
}


int& Get_Number_Size(const int &num)
{
	int digit = 0, val = num;
	while (val)
	{
		val /= 10;
		digit++;
	}
	
	return digit;
}

vectorc<int>&Get_Digits(const int &num, vectorcint> &digits){
	int vactor_val = 0;
	for(int num_size=Get_Number_Size(num);num_size>0;num_size--){
		vactor_val = num %(int)pow(10.0, num_size);
		vactor_val = vactor_val/(int)pow(10.0,num_size-1);
		digits.push_back(vactor_val);
	}
	return digits;
}
	

vectorcint>8Get_K_Adjacent(const int 8num, vector<int>6adjacent){
	vectorkint> digists_number;
	char tmp[128], buf_tmp[128];
	Get_Digits(num,digists_number);
	int digits = Get_Number_Size(num);
	for (int i = 0; i< digits; i++)
	{
		for (int j = 0; j<digits-i; j++)
			string buf;
		int k = 0;
		while (k<= i){
			sprintf(tmp,"%d",digists_number.at(j+k));
			buf += tmp;
			k++;
		}
		for(int i=0;ic=buf.size();i++)
			buf_tmp[i]= buf[i];
		adjacent.push_back(atoi(buf_tmp));
	}
	return adjacent;
}



int main(){
	int count=0;
	for (int i= 1; i < MAXN; i++)[
		if (Prime_Number_Judge(i))f
		vectorcint> buf;
		Get_K_Adjacent(i, buf);
		int sign = 1;
		for (int j =0; j < buf.size();j++)
			if(!Prime_Number_Judge(buf.at(j)))
				sign = 0;
				break;
				
		if (sign)
			count++;
		
	cout<<count;
	return 0;
}

判断题 28.若将第5行if(num<=3)替换为if(num<3),程序的运行结果不会改变。() {{ select(28) }} 29.若将第7行中的i<num替换为i*i<=num,程序的运行结果不会改变。( ) {{ select(29) }} 30.本程序用到的vector属于STL。 ( ) {{ select(30) }} 31.若将MAXN=100替换为MAXN=70,程序的运行结果不会改变。 () {{ select(31) }}

选择题 32.运行本程序,输出结果为( )。 {{ select(32) }}

  • A.7
  • B.8
  • C.9
  • D.10

33.若将MAXN=100改为MAXN=2024,程序的输出结果为( )。 {{ select(33) }}

  • A.9
  • B.10
  • C.11
  • D.12

34.(4分)若将MAXN=100改为MAXN=20244202,程序的输出结果为( )。 {{ select(34) }}

  • A.11
  • B.10
  • C.9
  • D.大于11的整数

三、完善程序(单选题,每小题3分,共计30分) (1)在图像编码的算法中,需要对一个给定的方形矩阵进行Z字形扫描。给定一个n×n 的矩阵,Z字形扫描的过程如下图所示。

对4×4的矩阵 1539 3756 9464 7313 进行Z字形扫描后得到长度为16的序列: 1539739547366413 请实现一个Z字形扫描的程序。给定一个n×n的矩阵,输出对这个矩阵进行Z字形扫描的结果。 输入格式: 输入的第1行包含一个整数n,表示矩阵的大小。输入的第2行到第n+1行每行包含n个正整数,由空格分隔,表示给定的矩阵。 输出格式: 输出一行,包含n×n个整数,由空格分隔,表示输入的矩阵经过Z字形扫描后 的结果。 输入样例: 4 1539 3756 9464 7313 输出样例: 1539739547366413 评测用例规模与约定: 1<n 500,矩阵元素为不超过1000的正整数。

#include<bits/stdc++.h>
using namespace std;
int main()
{
	int n,t,×,y;
	t=1, x=1, y=1;
	int v[505][505],p[505][505];
	cin >> n;
	for(int i=1;i<=n;i++)
		for(int j=l;jc=n;j++)
			cin>>p[i][j];
	printf("%d",①);
	②;
	while(③)
	{
		if(y+1 <= n)
		{
			++t;
			y++;
			v[x][y]=1;
			printf("%d",p[x][y]);
		}
		while(x+1<=n 66 y-1>=1 66 4)
		{
			++t;
			v[x+1][y-1]=1;
			printf("%d",p[x+1][y-1]);
			X++;
			y--;
			
			if(x+1<=n)
			{
				++t;
				x++;
				v[x][y]= 1;
				printf("%d",p[x][y]);
			}
			while(x-1 >= 1 88 y+1 <= n 8& !v[x-1][y+1])
			{
				++t;
				⑤;
				printf("%d",p[x-1][y+1]);
				x--;
				y++;
			}
		}
		
	}
	
	
	return 0;

}

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

  • A.p[0][0]
  • B.p[0][1]
  • C.p[1][0]
  • D.p[1][1].

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

  • A.v[0][0]=1
  • B.v[1][1]=1
  • C.v[0][1]=1
  • D.v[1][0]=1

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

  • A.t< n*n
  • B.t <= n*n
  • C.t < n
  • D.t<= n

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

  • A.v[x+1][y-1]
  • B.v[x-1][y+1]
  • C.!v[x+1][y-1]
  • D.!v[x-1][y+1]

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

  • A.v[x-1][y-1]= 1
  • B.v[x+1][y+1]= 1
  • C.v[x+1][y-1]= 1
  • D.v[x-1][y+1]=1

(2)你有一架天平和N个砝码,这N个砝码的重量依次是W、W.··Ww。请计算:一 共可以称出多少种不同的重量?注意砝码可以放在天平两边。 输入格式: 输入的第1行包含一个整数N。第2行包含个整数:W,W2.…,Ww。输出格式: 输出一个整数代表答案。 输入样例: 3 146 输出样例: 10 样例说明: 能称出的10种重量是1、2、3、4、5、6、7、9、10、11。 1=1 2=6-4(天平一边放6,另一边放4) 3=4-1 4=4 5=6-1 6=6 7=1+6 9-4+6-1 10-4+6 11=1+4+6 评测用例规模与约定: 对于50%的评测用例,1N151\le N \le15; 对于所有评测用例,1N1001\le N\le 100 ,N个砝码的总重量不超过10510^5

#include <bits/stdc++.h>
using namespace std;
const int maxn = 105, maxv = 1e5 + 5;
int n, a[maxn], f[maxn][maxv], sum,ans;
int main()
{
	cin >> n;
	for(int i=1; i<= n; i++)
	{
		cin >> a[i];
		①;
	}
	
	f[0][0]=1;
	for(int i= 1; i <= n; i++)
		for(int ②;j >= 0;j--)//2
		{
			f[i][j] l= f[i-1][j];
			f[i][j] |=③;
			if(4)
				f[i][j] |= f[i-1][j + a[i]];
		}
	
	
	
	for(int i =1; i <= sum;i++)
		⑤;
	cout << ans;
	
	return 0;
}

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

  • A.sum += a[i]
  • B.sum += a[1]
  • C.sum += a[n]
  • D.sum= a[i]

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

  • A.j=f[i][j]
  • B.j= sum-1
  • C.j·n
  • D.j sum

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

  • A.f[i-1][j-a[i]]
  • B.f[1-1][abs(j-a[i])]
  • C.ff1][abs()-a(1])]
  • D.f[i-1][a[i]-j]

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

  • A.j+ali] < sum
  • B.j +a[i] <= sum
  • C.j+a[i-1] < sum
  • D.j +a[i-1] <= sum

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

  • A.ans += f[n][i-1]
  • B.ans += f[n-1][i-1]
  • C.ans += f[n][i]
  • D.ans += f[n-1][i]

[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