2022入门组 CSP-J 初赛模拟试题 (11)

一、单选题(每题 2 分,共 30 分)
第 1 题 甲乙两位工人一起在工厂工作。甲的生产速度是每小时6个鼠标或2个键盘。乙的生产速度是每小时4个鼠标或4个键盘。在一天6小时的工作中,甲乙两人通过合理搭配,最多可以一起生产出( )个键鼠套装。
第 2 题 百度公司是一家于2000年创立的互联网公司,其业务范围十分广泛。以下选项中,( )不属于百度的业务范围。
第 3 题 假如数列3,6,12,24...符合固定规律,那么它的下一项最可能是( )。
第 4 题 在上网浏览时,可以注意到有些网址以http:// 开始,有-些则是https:// 。在这里,后者比前者多出的字母s是( )的缩写。
第 5 题 在一张桌子上放了一定数量的铅笔。甲和乙轮流拿走铅笔,每次可以拿1根或者2根,拿走最后一根铅笔的人获胜。假如甲先取那么在铅笔总数为( )根时乙将最终获胜。
第 6 题 将四个数字1,3,5,7经过四则运算(即只使用加、减、乘、除和括号)后,可能得到的最大结果是( )。
第 7 题 下列不属于计算机人工智能应用领域的是( )。
第 8 题 从本质上讲,计算机病毒是一种( )。
第 9 题 下列叙述中正确的是( )。
第 10 题 下列结构中为非线性结构的是( )
第 11 题 在访问网站时,链接前显示的htp:// 是一种( )。
第 12 题 一位农夫想用20米的铁栅栏围出一个四边形。无论他怎么尝试,这个四边形是面积最大都不会超过( )。
第 13 题 一袋水果中有50个香蕉,30个葡萄和40个草毒。一个人每次从袋子中随机抽取一个水果。( )次后,他手中肯定至少有10个相同种类的水果。
第 14 题 一位魔术师要将名为酥糖,布丁和曲奇的三只鸽子藏进A,B,C,D四个箱子里。每个箱子都足够大,可以同时放下三只鸽子。那么一共有多少种不同的藏法( )。
第 15 题 两位同学在讨论关于全球变暖的问题。小青认为全球变暖是错误的,因为她冬天早上起床时依旧觉得很冷。小蓝则认为全球变暖是确实存在的,原因是过去几十年中地球的平均气温越来越高了。在两个人的讨论中,( )。
二、判断题(每题 2 分,共 20 分)
第 16 题
#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的最小公倍数。( )
第 17 题 x0为最大公约数,y0为最小公倍数。( )
第 18 题 x0一定小于等于y0。( )
第 19 题 当x0,y0的数据范围在[2, 1000000]时,该程序在极端数据情况下会超时。( )
第 20 题 若输入为3 60,则输出为( )
第 22 题
#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可以使用一维数组代替。( )
第 23 题 若n的值大于100000,则一定会出现溢出。( )
第 24 题 该程序中visit[]数组使用做标记数组使用。( )
第 25 题 若输入的数据为5 17, 则输出为( )。
第 26 题 该程序是利用( )算法模板来完成的。
第 28 题
#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]可以定义在主函数外面。( )
第 29 题 该程序的时间复杂度为0(n^3)。( )
第 30 题 若输入为6 2 5则输出为( )。
三、编程题(每题 25 分,共 50 分)
第 32 题 密码锁. 乌龟给自己的贵重物品上了密码锁。密码锁上有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; 1>=0; --i)	{
		if (prime(i) ==0) continue ;
		__(5)__;
	}
	for(i=5; 1>=1; --i) cout<<ans[i];
	return 0;
}
第 32 题 ⑴处应填( )。
第 33 题 ⑵处应填( )。
第 34 题 ⑶处应填( )。
第 35 题 ⑷处应填( )。
第 36 题 ⑸处应填( )。
第 38 题 2.字符串替换 小明最近迷上了字符串操作。对每个字符串,小明每次可以执行以下两种操作之一: 1.把字符串中的某个字符改成任意一个其他字符,花费1的代价。 2.交换字符串中的两个字符,花费0的代价。 小明发现,把一个字符串通过一系列的操作,可以转换成任何一个与之等长的字符串。例如,把“hello”变为“world”的一种代价为3的操作序列如下: 1. hello→wello(替换h为w,代价为1) 2. wello→wolle(交换e和o,代价为0) 3. wolle→worle(替换l为r,代价为1) 4. worle→world(替换e为d,代价为1) 小明发现,无法用少于3次的代价将“hello”变为“world”。 显然,不同的转换方案花费的代价是不同的,请编程帮助小明计算把一个字符串变为另一个字符串的最小代价。 本题中的字符串根据给定的初始数值s按以下规则生成: for i=1,2,... n s←(s*345) mod 19997 第一个字符串的第i个字符的ASCII码为(97+(s mod 26)) for i=1,2,... n s←(s*345) 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;
}
第 38 题 ⑴处应填( )。
第 39 题 ⑵处应填( )。
第 40 题 ⑶处应填( )。
第 41 题 ⑷处应填( )。
第 42 题 ⑸处应填( )。