#CSP010. 入门级CSP-J第10套初赛模拟试题
入门级CSP-J第10套初赛模拟试题
一、单项选择题(共15题,每题2分,共计30分)
- 甲乙两位工人一起在工厂工作。甲的生产速度是每小时6个鼠标或2个键盘。乙的生产速度是每小时4个鼠标或4个键盘。在一天6小时的工作中,甲乙两人通过合理搭配,最多可以一起生产出()个键鼠套装。 {{ select(1) }}
- 21
- 24
- 28
- 27
- 百度公司是一家于2000年创立的互联网公司,其业务范围十分广泛。以下选项中,()不属于百度的业务范围。 {{ select(2) }}
- 台式计算机
- 地图
- 搜索引擎
- 移动应用
- 假如数列3,6,12,24...符合固定规律,那么它的下一项最可能是()。 {{ select(3) }}
- 48
- 96
- 72
- 27
- 在上网浏览时,可以注意到有些网址以
http://开始,有一些则是https://。在这里,后者比前者多出的字母s是()的缩写。 {{ select(4) }}
- Second
- Secure
- System
- Speed
- 在一张桌子上放了一定数量的铅笔。甲和乙轮流拿走铅笔,每次可以拿1根或者2根,拿走最后一根铅笔的人获胜。假如甲先取,那么在铅笔总数为()根时乙将最终获胜。 {{ select(5) }}
- 356
- 525
- 974
- 无法判断
- 将四个数字1,3,5,7经过四则运算(即只使用加、减、乘、除和括号)后,可能得到的最大结果是()。 {{ select(6) }}
- 140
- 180
- 120
- 105
- 下列不属于计算机人工智能应用领域的是()。 {{ select(7) }}
- 在线订票
- 医疗诊断
- 智能机器人
- 机器翻译
- 从本质上讲,计算机病毒是一种()。 {{ select(8) }}
- 细菌
- 文本
- 程序
- 微生物
- 下列叙述中正确的是()。 {{ select(9) }}
- 所谓算法就是计算方法
- 程序可以作为算法的一种描述方法
- 算法设计只需考虑得到计算结果
- 算法设计可以忽略算法的运算时间
- 下列结构中为非线性结构的是()。 {{ select(10) }}
- 树
- 向量
- 二维表
- 矩阵
- 在访问网站时,链接前显示的
http://是一种()。 {{ select(11) }}
- 数据类型
- 顶级域名
- 文件格式
- 传输协议
- 一位农夫想用20米的铁栅栏围出一个四边形。无论他怎么尝试,这个四边形的面积最大都不会超过()。 {{ select(12) }}
- 25 m²
- 21 m²
- 32 m²
- 16 m²
- 一袋水果中有50个香蕉,30个葡萄和40个草莓。一个人每次从袋子中随机抽取一个水果。()次后,他手中肯定至少有10个相同种类的水果。 {{ select(13) }}
- 12
- 28
- 13
- 30
- 一位魔术师要将名为酥糖、布丁和曲奇的三只鸽子藏进A,B,C,D四个箱子里。每个箱子都足够大,可以同时放下三只鸽子。那么一共有多少种不同的藏法()。 {{ select(14) }}
- 24
- 64
- 48
- 120
- 两位同学在讨论关于全球变暖的问题。小青认为全球变暖是错误的,因为她冬天早上起床时依旧觉得很冷。小蓝则认为全球变暖是确实存在的,原因是过去几十年中地球的平均气温越来越高了。在两个人的讨论中,()。 {{ select(15) }}
- 小青提出的是观点;小蓝提出的是事实
- 小青小蓝提出的都是事实
- 小青提出的都是事实;小蓝提出的是观点
- 小青小蓝提出的都是观点
二、阅读程序(共计40分;判断题每题1.5分,选择题每题3分)
(一)GCD与LCM计数
#include<iostream>
#include<cstdio>
using namespace std;
int gcd(int a,int b)
{
while (b!=0)
{
int r=a%b;
a=b;
b=r;
}
return a;
}
int main()
{
int x0,y0,ans=0;
cin>>x0>>y0;
for(int p=x0;p<=y0;p++)
{
for(int q=x0;q<=y0;q++)
{
int g=gcd(p,q);
int b=p*q/g;
if(g==x0&&b==y0) ans++;
}
}
cout<<ans<<endl;
}
判断题
16. int gcd(int a,int b)函数是求a,b的最小公倍数。()
{{ select(16) }}
- 正确
- 错误
- x0为最大公约数,y0为最小公倍数。() {{ select(17) }}
- 正确
- 错误
- x0一定小于等于y0。() {{ select(18) }}
- 正确
- 错误
- 当x0,y0的数据范围在[2,1000000]时,该程序在极端数据情况下会超时。() {{ select(19) }}
- 正确
- 错误
选择题
20. 若输入为3 60,则输出为()。
{{ select(20) }}
- 4
- 6
- 8
- 16
(二)BFS最少操作次数
#include<iostream>
#include<queue>
#define MAXN 100010
using namespace std;
bool visit[MAXN];
int n,k;
int ans[MAXN];
bool judge (int x)
{
bool flag=true;
if(visit[x]) flag=false;
if(x<0) flag=false;
if(x>100000) flag=false;
return flag;
}
void bfs(int x)
{
queue<int> q;
q.push(x);
while(!q.empty())
{
int v=q.front();
q.pop();
visit[v]=true;
if(v==k)
{
return;
}
else
{
for(int i=0;i<3;i++)
{
int w;
switch(i)
{
case 0:w=v-1;break;
case 1:w=v+1;break;
case 2:w=v*2;break;
}
if(judge(w))
{
visit[w]=true;
ans[w]=ans[v]+1;
q.push(w);
}
}
}
}
}
int main()
{
cin>>n>>k;
ans[n]=0;
bfs(n);
cout<<ans[k];
return 0;
}
判断题 21. 代码中使用的队列queue可以使用一维数组代替。() {{ select(21) }}
- 正确
- 错误
- 若n的值大于100000,则一定会出现溢出。() {{ select(22) }}
- 正确
- 错误
- 该程序中
visit[]数组作为标记数组使用。() {{ select(23) }}
- 正确
- 错误
选择题
24. 若输入的数据为5 17,则输出为()。
{{ select(24) }}
- 4
- 6
- 7
- 8
- 该程序是利用()算法模板来完成的。 {{ select(25) }}
- 深度优先搜索
- 宽度优先搜索
- 记忆化搜索
- 迭代加深搜索
(三)数组洗牌
#include<iostream>
#include<cstdio>
using namespace std;
int main()
{
int n,k,ii,i,j;
int a[1010],b[1010];
cin>>n>>k>>ii;
for(i=1;i<=n;++i) a[i]=i;
for(i=1;i<=k;++i){
for(j=1;j<=n;++j)
if(j%2==1) b[j]=a[(j+1)/2];
else b[j]=a[n/2+j/2];
for(j=1;j<=n;++j)
a[j]=b[j];
}
cout<<a[ii];
return 0;
}
判断题
26. 题目中的数组a[1010],b[1010]可以定义在主函数外面。()
{{ select(26) }}
- 正确
- 错误
- 该程序的时间复杂度为O(n³)。() {{ select(27) }}
- 正确
- 错误
选择题
28. 若输入为6 2 5则输出为()。
{{ select(28) }}
- 4
- 2
- 8
- 1
三、完善程序(单选题,每小题3分,共计30分)
(一)密码锁
密码锁上有5个数字拨盘。每个数字拨盘每次向上拨使数字增加1(9向上拨得到0),向下拨使数字减少1(0向下拨得到9)。拨盘上的数字组成一个5位数,只要变为素数就能开锁。求最少拨动次数对应的5位素数,多解时输出最大的数。
#include<bits/stdc++.h>
using namespace std;
int x,ma=1000;
int xx[10],yy[10],ans[10];
int prime (int x)
{
int i;
if(x<2) return 0;
for(i=2;i*i<=x;++i)
if(①) return 0;
return 1;
}
void check(int y)
{
int t=0,i,tot=0;
memset (yy,0, sizeof (yy));
while(y){
yy[++t]=②;
y/=10;
}
for(i=1;i<=5;++i)
tot+=min(③, abs(10+xx[i]-yy[i]));
if(tot<ma){
ma=tot;
for(i=1;i<=5;++i) ans[i]=yy[i];
}
}
int main()
{
int i,t=0;
cin>>x;
while(x){
xx[++t]=x%10;
④;
}
for(i=99999;i>=0;--i){
if(prime(i)==0) continue;
⑤;
}
for(i=5;i>=1;--i) cout<<ans[i];
return 0;
}
- ①处应填写()。 {{ select(29) }}
- x%i==0
- x%i==1
- x%i=1
- x%i=0
- ②处应填写()。 {{ select(30) }}
- y%100
- y%10
- y/10
- y/100
- ③处应填写()。 {{ select(31) }}
- abs(yy[i]-xx[i])
- yy[i]-xx[i]
- max(yy[i]-xx[i])
- min(yy[i]-xx[i])
- ④处应填写()。 {{ select(32) }}
- x /=10
- x%=10
- x%==10
- x /=100
- ⑤处应填写()。 {{ select(33) }}
- check(i*i)
- check(i)
- Check(i)
- check(i>>2)
(二)字符串最小替换代价
每次可以替换一个字符(代价1)或交换两个字符(代价0),求将第一个字符串变为第二个的最小代价。字符串由给定种子按规则生成。
#include<iostream>
#include<cstdio>
using namespace std;
int main()
{
int i,n,s,minn,ans=0;
int a[200]={0},b[200]={0};
①;
for(i=1;i<=n;++i){
s=②;
③;
}
for(i=1;i<=n;++i){
s=(s*345)%19997;
b['a'+s%26]++;
}
for(i=④;i<='z';++i){
minn=⑤;
ans+=a[i]-minn;
}
cout<<ans<<endl;
return 0;
}
- ①处填写()。 {{ select(34) }}
- cin>>n>>s
- cin>>s>>n
- cin<<n<<s
- cin<<s<<n
- ②处填写()。 {{ select(35) }}
- (s *345)%26
- (s * 345)%19997
- (s*345)%1997
- (s*345)/1997
- ③处填写()。 {{ select(36) }}
- a['a'+s%1997]++
- a['a'+s%26]++
- a['a'+s%26]--
- --a['a'+s%26]
- ④处填写()。 {{ select(37) }}
- 'a'
- 'b'
- 'A'
- 'Z'
- ⑤处填写()。 {{ select(38) }}
- min(a[i],b[i])
- max(a[i],b[i])
- abs(a[i],b[i])
- (a[i],b[i])
粤公网安备44195502000195号