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分;每题有且仅有一个正确选项)
- 十进制数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.拓扑排序
- 一台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
- 在不大于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点
二、阅读程序(程序输入不超过数组或字符串定义的范围:判断题正确填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%的评测用例,; 对于所有评测用例,,N个砝码的总重量不超过。
#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考前刷题
- 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