CSP-J 模拟6
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.18和3
- B.16和3
- C.15和3
- D.16和4
2.使用邻接矩阵表示N个结点的有向图,所需要的存储空间为( )。 {{ select(2) }}
- A.NX(N+1)
- B.N2
- C.N×(N-1)
- D.N×(N-1)/2
3.在C++程序中,表达式a%=b与下列哪个表达式是等价的?() {{ select(3) }}
- A.a=%b
- B.a/=b
- C.a=b%a
- D.a=a%b
4.线性表若采用链表存储结构,则要求内存中可用存储单元地址( )。{{ select(4) }}
- A. 必须连续
- B.必须不连续
- C.连续或不连续都行
- D.部分连续
- 我们输入一个新闻网站的网址便可访问该网站,其中用到的网络协议是( ) {{ select(5) }}
- A.DNS
- B.FTP
- C.SSH
- D.TELNET
- 以下哪个不属于STL中栈的操作函数?( ) {{ select(6) }}
- A.empty
- B.front
- C.push
- D.pop
7.平面上任取n个整点(横坐标和纵坐标都是整数),其中一定存在两个点,它们的中 点也是整点,那么n至少是( )。 {{ select(7) }}
- A.4
- B.5
- C.6
- D.7
8.以下哪个操作属于位运算范畴?( ) {{ select(8) }}
- A.66
- B.11
- C.>>>
- D.^
9.关于树这种数据结构,下面的说法中哪个是正确的?( ) {{ select(9) }}
- A.满二叉树的结点总数一定是奇数
- B.完全二叉树的结点总数一定是奇数
- C.树形结构只有双亲表示法和孩子表示法
- D.二叉树的遍历方法只有前序遍历法和后序遍历法
- 以下哪个选项不属于头文件cmath?() {{ select(10) }}
- A.find(iterator first, iterator last, int x)
- B.abs(int x)
- C.ceil(double x)
- D.pow(double x,double y)
11.在C++语言中,表达式584|3的值等于( )。 {{ select(11) }}
- A.7
- B.5
- C.4
- D.3
12.定义变量double n,如果下面的代码输入为1000,则输出最接近( ) {{ select(12) }}
#include<bits/stdc++.h>
using namespace std;
int main()
{
double n;
cin>>n;
cout << log10(n)-log2(n)<< endl;
return 0;
}
- A.0 B.-5 C.-7 D.7
13.在图的广度优先搜索中,要维护一个标识数组表示已经访问过的图的结点,需要 ()数据结构存放结点以实现遍历。 {{ select(13) }}
- A.栈 B.队列 C.哈希表 D.堆
14.从一个6×6的棋盘(不可旋转)中选取不在同一行也不在同一列的两个方格,共有 ( )种方法。 {{ select(14) }}
- A.480 B.450 C.360 D.720
15.下列关于集合的说法哪个不正确?() {{ select(15) }}
- A.一个元素是否属于一个集合是确定的
- B.集合中的元素两两不同
- C.0属于空集
- D. 集合中的元素不存在先后次序
二、阅读程序(程序输入不超过数组或字符串定义的范围;判断题正确填V,错误填×除特殊说明外,判断题每题1.5分,选择题每题3分,共计40分)
(1)
#include <bits/stdc++.h>
using namespace std;
int main()
{
set <int> s;
srand(time(0));
int n=6;
int 1=12;
int k,i=0,a[n];
while(s.size()<n)
{
k=rand()%10+1;
s.insert(k);
}
set <int>::iterator it;
for(it=s.begin();it!=s.end(); it++)
a[i++] = xit;
for(int i=0; icn; i++)
{
int x=rand()%n;
int y=rand()%n;
if(a[x] > aly])
swap(alx],aly]);
}
for(int i=0; icn; i++)
cout<<ali]<<" ";
return 0;
}
判断题 16.若去掉第6行,程序的输出结果不受任何影响 () {{ select(16) }} 17.若去掉第8行,程序的输出结果中的数字总数不变。 () {{ select(17) }} 18.程序的输出结果是一个从小到大排列的整数序列。 () {{ select(18) }} 19.将第10行中的s.size()替换成s.length(),程序的运行结果不会改变。() {{ select(19) }} 选择题 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] 88 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;
}
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
(2)
#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;
}
vectorc<int>&Get_K_Adjacent(const int 8num, vector<int>6adjacent){
vectork<int> 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))
{
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%的评测用例,1<N 15; 对于所有评测用例,1 N 100,N个砝码的总重量不超过10°。
#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