#YHCSPJ0005. CSP-J模拟卷5
CSP-J模拟卷5
单项选择题(共 15 题,每题 2 分,共计 30 分;每题有且仅有一个正确选项)
1. 甲乙两位工人一起在工厂工作。甲的生产速度是每小时 6 个鼠标或 2 个键盘。乙的生产速度是每小时 4 个鼠标或 4 个键盘。在一天 6 小时的工作中,甲乙两人通过合理搭配,最多可以一起生产出( )个键鼠套装。
( )。{{ select(1) }}
- 21
- 24
- 28
- 27
2. 百度公司是一家于 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) }}
- 树
- 向量
- 二维表
- 矩阵
- 在访问网站时,链接前显示的 htp:// 是一种( )。 ( )。 {{ select(11) }}
- 数据类型
- 顶级域名
- 文件格式
- 传输协议
- 一位农夫想用 20 米的铁栅栏围出一个四边形。无论他怎么尝试,这个四边形是面积最大都不会超过( )。 ( )。 {{ select(12) }}
- 25 m^2
- 21 m^2
- 32 m^2
- 16 m^2
- 一袋水果中有 50 个香蕉,30 个葡萄和 40 个草莓。一个人每次从袋子中随机抽取一个水果。( )次后,他手中肯定至少有 10 个相同种类的水果。 ( )。{{ select(13) }}
- 12
- 28
- 13
- 30
- 一位魔术师要将名为酥糖,布丁和曲奇的三只鸽子藏进 A,B,C,D 四个箱子里。每个箱子都足够大,可以同时放下三只鸽子。那么一共有多少种不同的藏法( )。 ( )。 {{ select(14) }}
- 24
- 64
- 48
- 120
- 两位同学在讨论关于全球变暖的问题。小青认为全球变暖是错误的,因为她冬天早上起床时依旧觉得很冷。小蓝则认为全球变暖是确实存在的,原因是过去几十年中地球的平均气温越来越高了。在两个人的讨论中,( )。 ( )。 {{ select(15) }}
- 小青提出的是观点;小蓝提出的是事实
- 小青小蓝提出的都是事实
- 小青提出的都是事实;小蓝提出的是观点
- 小青小蓝提出的都是观点
阅读程序(程序输入不超过数组或字符串定义的范围;除特殊说明外,判断题 1.5 分,选择题 3 分,共计 40 分)
#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) }}
- 正确
- 错误
17 x0 为最大公约数,y0 为最小公倍数。( )
( )。{{ select(17) }}
- 正确
- 错误
18 x0 一定小于等于 y0。( )
( )。{{ select(18) }}
- 正确
- 错误
19 当 x0,y0 的数据范围在[2, 1000000]时,该程序在极端数据情况下会超时。( )
( )。{{ select(19) }}
- 正确
- 错误
20 若输入为 3 60,则输出为( )
( )。{{ select(20) }}
- 4
- 6
- 8
- 16
21 若输入为 2 120,则输出为( )
( )。{{ select(21) }}
- 6
- 8
- 9
- 10
#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;
}
判断题
22 代码中使用的队列 queue 可以使用一维数组代替。( )
( )。{{ select(22) }}
- 正确
- 错误
23 若 n 的值大于 100000,则一定会出现溢出。( )
( )。{{ select(23) }}
- 正确
- 错误
24 该程序中 visit[]数组使用做标记数组使用。( )
( )。{{ select(24) }}
- 正确
- 错误
25 若输入的数据为 5 17, 则输出为 6( )。
( )。{{ select(25) }}
- 正确
- 错误
26 该程序是利用( )算法模板来完成的。
( )。{{ select(26) }}
- 深度优先搜索
- 宽度优先搜索
- 记忆化搜索
- 迭代加深搜索
27 该程序时间复杂度是多( )。
( )。{{ select(27) }}
- O(n)
- O(n^2)
- O(nlog(n))
- O(log(n))
#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;
}
28 题目中的数组 a[1010],b[1010]可以定义在主函数外面。( )
( )。{{ select(28) }}
- 正确
- 错误
29 该程序的时间复杂度为 0(n^2)。( )
( )。{{ select(29) }}
- 正确
- 错误
30 若输入为 6 2 5 则输出为( )。
( )。{{ select(30) }}
- 4
- 2
- 8
- 1
31. 若输入的 n 为 100,k 为大于 10000000000 的数,程序的运行结果可能是?
( )。{{ select(31) }}
- 输出 a 中的某个位置的数
- 运行超时但结果正确
- 因栈溢出崩溃
- 输出结果一定错误
32. 当 k 的值足够大时,数组 a 最终会呈现什么状态?
( )。{{ select(32) }}
- 元素完全随机排列
- 元素按升序排列
- 元素按降序排列
- 进入循环状态(周期性重复)
33. 若将数组 a 的初始值全部设为 0,程序的输出会是什么?
( )。{{ select(33) }}
- 0
- ii
- 取决于 k 的值
- 未定义行为
完善程序(单选题,每题 3 分,共计 30 分)
1. 密码锁.
乌龟给自己的贵重物品上了密码锁。密码锁上有5个数字拨
盘。每个数字拨盘每次向上拨使数字增加1(9向上拨得到0)
,向下拨使数字减少1(0向下拨得到9)。
拨盘上的数字组成一个5位数。只要拨盘上的数字变为素数,
密码锁就会被解开。素数(又称质数)是只能被1和它自身整除
的大于1的自然数。
因为乌龟动作实在太慢,他希望你帮他计算如何开锁,使得拨
动的总次数最少。
输入:
一个5位数,表示拨盘的初始数字
输出:
一个5位素数,表示开启密码锁使用的素数(拨动次数最少)。
如有多组解,输出满足条件的最大数
样例输入:
01210
样例输出:
01319
#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(__(1)__) return 0;
return 1;
}
void check(int y)
{
int t=0, i, tot=0;
memset (yy,0, sizeof (yy)) ;
while(y) {
yy[++t]=__(2)__;
y/=10;
}
for(i=1; i<=5; ++i)
tot+=min(__(3)__,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;
__(4)__;
}
for(i=99999; i>=0; --i) {
if (prime(i) ==0) continue ;
__(5)__;
}
for(i=5; i>=1; --i) cout<<ans[i];
return 0;
}
选择题
34. ⑴ 处应填( )。 {{ select(34) }}
- x%i==0
- x%i==1
- x%i!=1
- x%i!=0
35. ⑵ 处应填( )。 {{ select(35) }}
- y%100
- y%10
- y/10
- y/100
36. ⑶ 处应填( )。{{ select(36) }}
- abs(yy[i]-xx[i])
- yy[i]-xx[i]
- max(yy[i]-xx[i])
- min(yy[i]-xx[i])
37. ⑷ 处应填( )。{{ select(37) }}
- x/= 10
- x%=10
- x%==10
- x/=100
38. ⑸ 处应填( )。{{ select(38) }}
- check(i*i)
- check(i)
- Check(i)
- check(i>>2)
2.字符串替换
小明最近迷上了字符串操作。对每个字符串,小明每次可以执行以下两种操作之一: 1.把字符串中的某个字符改成任意一个其他字符,花费1的代价。 2.交换字符串中的两个字符,花费0的代价。 小明发现,把一个字符串通过一系列的操作,可以转换成任何一个与之等长的字符串。例如,把“hello”变为“world”的一种代价为3的操作序列如下:
- hello→wello(替换h为w,代价为1)
- wello→wolle(交换e和o,代价为0)
- wolle→worle(替换l为r,代价为1)
- worle→world(替换e为d,代价为1) 小明发现,无法用少于3次的代价将“hello”变为“world”。 显然,不同的转换方案花费的代价是不同的,请编程帮助小明计算把一个字符串变为另一个字符串的最小代价。 本题中的字符串根据给定的初始数值s按以下规则生成: for i=1,2,... n s←(s345) mod 19997 第一个字符串的第i个字符的ASCII码为(97+(s mod 26)) for i=1,2,... n s←(s345) mod 19997 第二个字符串的第i个字符的ASCII码为(97+(s mod 26)) 输入: 正整数n (字符串长度), s (数据生成器的初始数值)。1≤n≤1000, 1≤s≤19997。 输出: 将第一个字符串转换为第二个字符串的最少代价。 输入 样例输入1 4 35 样例输入2 输出 100 31 样例输出1 2 样例输出2 29 在样例1中,生成的字符串是“lzvv”和“xylv”,将第一个字符串变为第二个的最为2。
#include <iostream>
#include <cstdio>
using namespace std;
int main()
{
int i,n,s,minn,ans=0;
int a[200]= {0},b[200]= {0};
__(1)__;
for(i=1; i<=n; ++i) {
s=__(2)__
__(3)__;
}
for(i=1; i<=n; ++i) {
s= (s*345)%19997 ;
b['a'+s%26]++;
}
for(i=__(4)__; i<='z'; ++i) {
minn=__(5)__;
ans+=a[i]-minn;
}
cout<<ans<<endl ;
return 0;
}
选择题
39. ⑴ 处应填( )。{{ select(39) }}
- cin>>n>>s
- cin>>s>>n
- cin << n<< s
- cin << s << n
40. ⑵ 处应填( )。{{ select(40) }}
- (s*345)%26
- (s*345)%19997
- (s*345)%1997
- (s*345)/1997
41. ⑶ 处应填( )。{{ select(41) }}
- a['a'+s%1997]++
- a['a'+s%26]++
- a['a'+s%26]--
- --a['a'+s%26]
42. ⑷ 处应填( )。{{ select(42) }}
- 'a'
- 'b'
- 'A'
- 'Z'
43. ⑸ 处应填( )。{{ select(43) }}
- min(a[i],b[i])
- max(a[i],b[i])
- abs(a[i],b[i])
- (a[i],b[i])