#CSP015. 入门级CSP-J第15套初赛模拟试题
入门级CSP-J第15套初赛模拟试题
一、单项选择题(共15题,每题2分,共计30分)
cout << 011 + 11;的计算结果是( ) {{ select(1) }}
- 6
- 14
- 20
- 22
- 在程序中用到的一个常数
2e-3在内存中占( )空间。 {{ select(2) }}
- 4B
- 4b
- 6B
- 8B
- 某同学家里装一条宽带进行上网,运营商的带宽是200M。他需要下载一个大小为2GB的软件,极限最快大约需要( )秒。 {{ select(3) }}
- 1
- 10
- 100
- 1000
- 学校机房的一台计算机IP地址为
10.20.220.222,子网掩码为255.255.192.0,那么学校机房的网络号是( ) {{ select(4) }}
- 255.255.192.0
- 10.20.192.0
- 10.20.220.0
- 255.255.220.0
- 已知大写字母
'A'的ASCII码加上空格的ASCII码等于字母'a'的ASCII码。请问空格的ASCII码值是( ) {{ select(5) }}
- 30
- 31
- 32
- 22
- 排序相关STL中,属于稳定排序的是( ) {{ select(6) }}
sort()qsort()stable_sort()partial_sort()
- 下列( )不是STL序列式容器。 {{ select(7) }}
- set
- list
- vector
- deque
cin、cout属于下面哪一种?( ) {{ select(8) }}
- 类
- 结构体
- 函数
- 变量
- 同一个小数,用
double变量存和用float变量存相比,数值大小关系是( ) {{ select(9) }}
- 大
- 小
- 相等
- 不确定
- 程序员在
main函数中用malloc()函数开辟了一个数组空间,这个空间位于内存的( )区域。 {{ select(10) }}
- 栈内存
- 堆内存
- 全局区(静态区)
- 都有可能
- 希尔排序的平均时间复杂度为( ) {{ select(11) }}
- O(n^1.25)
- O(n log n)
- O(n)
- O(n^2)
- 4个人过河,过河所需时间分别是1、2、5、10。每次最多过两人,速度由慢者决定;已过河的一人返回,速度由返回者决定。过河所需最短时间是( ) {{ select(12) }}
- 19
- 18
- 17
- 16
- 康托展开公式:
X = a_n*(n-1)! + a_{n-1}*(n-2)! + ... + a_1*0!,a_i表示从右往左数第i位的数在未出现的数中排第几(序号从0开始)。序列52413的康托展开值是( ) {{ select(13) }}
- 105
- 106
- 107
- 108
- 有物不知其数,三三数之剩二,五五数之剩三,七七数之剩二。第5个满足该条件的数是( ) {{ select(14) }}
- 233
- 443
- 653
- 758
- 下面哪位科学家的研究基本完成了量子计算机的理论基础。( ) {{ select(15) }}
- 图灵
- 冯诺依曼
- 杨振宁
- 姚期智
二、阅读程序(共计40分;判断题每题1.5分,选择题每题3分,特殊标注除外)
(一)字符串算式处理
#include<bits/stdc++.h>
using namespace std;
int n,x,y;
char op,a[1000],b[1000];
int deal(){
switch (op){
case '+':return x+y;
case '-':return x-y;
case '*':return x*y;
}
}
int main(){
scanf("%d\n",&n);
while (n--){
gets(a);
switch (a[0]){
case 'a':op='+';sscanf(a+2,"%d %d", &x,&y);break;
case 'b':op='-';sscanf(a+2,"%d %d",&x,&y);break;
case 'c':op='*';sscanf(a+2,"%d %d",&x,&y);break;
default :sscanf(a,"%d %d",&x,&y);
}
sprintf (b,"%d%c%d=%d",x,op,y,deal());
puts(b);
printf("%d\n",strlen(b));
}
return 0;
}
输入一个整数n(1 ≤ n ≤ 50),接下来n行每行表示一个算式。若行首为字母a/b/c,分别表示加、减、乘法,后跟两个运算数;若行首为数字,则沿用上行的运算符,两个数字为运算数。保证第一个算式包含运算符。
判断题
16. sscanf与scanf功能类似,后者从标准输入读取数据,前者从指定字符数组中读取数据。( )
{{ select(16) }}
- 正确
- 错误
- 将第13行
scanf("%d\n",&n);改为scanf("%d",&n);,程序运行结果不变。( ) {{ select(17) }}
- 正确
- 错误
- 将第15行
gets(a);改为getline(cin,a);,程序运行结果不变。( ) {{ select(18) }}
- 正确
- 错误
- 将第23行
puts(b);改为cout<<b;,程序运行结果不变。( ) {{ select(19) }}
- 正确
- 错误
选择题
20. 若输入行内容为d 64 46,则输出为( )
{{ select(20) }}
- 64/46=1
- 64/46=1 7
- 0 1
- 运行出错
- (4分)若输入
2后依次输入a 64 46和275 125,输出为( ) {{ select(21) }}
- 64+46=110 275+125=400
- 110 400
- 64+46=110 9 275+125=400 11
- 0 1 2
(二)高精度加法
#include<bits/stdc++.h>
using namespace std;
struct Big_int{
int a[1000],len;
Big_int(){
memset(a,0, sizeof(a));
len=1;
}
Big_int(string s){
len=s.size();
for(int i=len;i>=1;i--) a[i]=s[len-i]-'0';
}
void print(){
int i=len;
for(;i>1;i--) if(a[i]>0) break;
for(int j=i;j>=1;j--) cout<<a[j];
}
Big_int operator+(const Big_int &x){
Big_int ans;
ans.len=(len>x.len? len:x.len);
for(int i=1;i<=ans.len;i++){
ans.a[i]+=a[i]+x.a[i];
ans.a[i+1]+=ans.a[i]/10;
ans.a[i]%=10;
}
if (ans.a[ans.len+1]>0) ans.len++;
return ans;
}
};
string s;
int main(){
cin>>s;
Big_int a(s);
cin>>s;
Big_int b(s);
Big_int c=a+b;
c.print();
return 0;
}
判断题
22. C++语言中,struct默认成员访问权限是public,而class默认是private。( )
{{ select(22) }}
- 正确
- 错误
- 第6行
memset按4字节为单位对int数组逐元素置0。( ) {{ select(23) }}
- 正确
- 错误
- 将第7行
len = 1;改为len = 0;,程序运行结果不变。( ) {{ select(24) }}
- 正确
- 错误
- 去掉第14行
int i=len;,将第15行改为for(int i=len;i>1;i--),程序运行结果不变。( ) {{ select(25) }}
- 正确
- 错误
- 将第18行参数
const Big_int &x改为Big_int x,程序运行结果不变。( ) {{ select(26) }}
- 正确
- 错误
- 将第22行
ans.a[i]+=a[i]+x.a[i];改为ans.a[i]=a[i]+x.a[i];,程序运行结果不变。( ) {{ select(27) }}
- 正确
- 错误
单选题
28. 若输入010 0090,输出为( )
{{ select(28) }}
- 100
- 0100
- 00100
- 运行出错
(三)01背包(递归实现)
#include<bits/stdc++.h>
using namespace std;
const int maxn=1000005;
int n,m;
int w[maxn],c[maxn];
int f(int m,int n){
if(n==0) return 0;
int x=f(m,n-1);
int y=0;
if(m-w[n]>=0) y=f(m-w[n],n-1)+c[n];
return max(x,y);
}
int main(){
cin>>m>>n;
for(int i=1;i<=n;i++)
cin>>w[i]>>c[i];
cout<<f(m,n);
return 0;
}
输入的n不超过200,m不超过30,w[i]、c[i]均为不超过5000的正整数。
判断题
29. main函数中的m、n与f函数中的m、n占用内存中不同的空间。( )
{{ select(29) }}
- 正确
- 错误
- 输入
m=0时,程序可能会死循环或发生运行错误。( ) {{ select(30) }}
- 正确
- 错误
单选题
31. 若输入2 2 1 2 3 4,输出为( )
{{ select(31) }}
- 0
- 2
- 6
- 10
- 若输入
10 2 1 2 3 4,输出为( ) {{ select(32) }}
- 0
- 2
- 6
- 10
- 若输入
10 4 2 1 3 3 5 7 9,输出为( ) {{ select(33) }}
- 8
- 10
- 12
- 14
- (4分)若输入
20 10,后续依次输入重量与价值均为1到20的物品,输出为( ) {{ select(34) }}
- 100
- 110
- 20
- 24
三、完善程序(单选题,每小题3分,共计30分)
(一)回文平方数
给定进制B(2 ≤ B ≤ 20),输出所有1~300(十进制)中,平方在B进制下为回文数的数。大于9的数位用A,B...表示。
#include<bits/stdc++.h>
using namespace std;
int b,a[10000],aa[10000],cnta, cntaa;
void changeb(int x,int ①,int &cnt){
cnt=0;
while (x>0) a[cnt++]= ② ;
}
bool is_pal(){
for(int i=0,j= ③ ;i<j;i++,j--)
if(aa[i]!=aa[j]) return 0;
return 1;
}
void print(int ④,int cnt){
for(int i=cnt-1;i>=0;i--)
if(a[i]>=0 && a[i]<=9) cout<<a[i];
else cout<< ⑤ ;
}
int main(){
cin>>b;
for(int i=1;i<=300;i++){
changeb(i,a,cnta);
changeb(i*i,aa, cntaa);
if(is_pal()){
print(a,cnta);
cout<<" ";
print(aa, cntaa);
cout<<endl;
}
}
return 0;
}
- ①处应填( ) {{ select(35) }}
- a
- *a
- &a
- a+1
- ②处应填( ) {{ select(36) }}
- x%b; x/=b
- x/=b; x%b
- x/=b
- x%b
- ③处应填( ) {{ select(37) }}
- cnta
- cnta-1
- cntaa-1
- cntaa
- ④处不能填( ) {{ select(38) }}
- cnt
- *cnt
- &cnt
- const cnt
- ⑤处应填( ) {{ select(39) }}
- a[i]
- char(a[i])
- char('A'+a[i])
- char('A'+a[i]-10)
(二)吃奶酪
老鼠从(0,0)出发,吃完所有n块奶酪的最短距离。n ≤ 15,输出保留2位小数。
#include<bits/stdc++.h>
using namespace std;
int n;
double a[16][3];
double dp[ ① ][16],ans;
double dis (int x,int y){
return sqrt((a[x][1]-a[y][1])*(a[x][1]-a[y][1])+(a[x][2]-a[y][2])*(a[x][2]-a[y][2]));
}
int main(){
cin>>n;
for(int i=1;i<=n;i++) cin>>a[i][1]>>a[i][2];
n++;
memset(dp,127, sizeof(dp));
dp[1][0]=0;
for(int s=0;s<=(1<<n)-1;s++){
for(int i=1;i<=n-1;i++){
if( ② ) continue;
int x= ④ ;
for(int j=0;j<=n-1;j++){
if( ③ ) continue;
dp[s][i]=min(dp[s][i],dp[x][j]+dis(j,i));
}
}
}
int x= ⑤ ;
ans=dp[x][1];
for(int i=2;i<n;i++) ans=min(dp[x][i],ans);
printf("%.2lf",ans);
return 0;
}
- ①处应填( ) {{ select(40) }}
- 3
- 16
- 20
- 1<<16
- ②处应填( ) {{ select(41) }}
- (s&(1<<i))==0
- (x&(1<<j))==0
- (s&(1<<i))
- (x&(1<<j))
- ③处应填( ) {{ select(42) }}
- (s&(1<<i))==0
- (x&(1<<j))==0
- (s&(1<<i))
- (x&(1<<j))
- ④处应填( ) {{ select(43) }}
- s-(1<<i)
- s
- (1<<n)-1
- 1<<n
- ⑤处应填( ) {{ select(44) }}
- s-(1<<i)
- s
- (1<<n)-1
- 1<<n
粤公网安备44195502000195号