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

一、单选题(每题 2 分,共 30 分)
第 1 题 下列关于解释程序和编译程序的四条叙述,其中正确的是( )。
第 2 题 十进制数(-123)的原码表示为( )。
第 3 题 网络管理员排查无法访问www.cisco.com的故障,发现在浏览器中键入web服务器的IP地址可以访问网页,那故障应该归咎于哪个应用层协议( )。
第 4 题 以下程序段执行完毕后,输出的结果是( )。
#include < bits/stdc++.h > 
using namespace std;
int prime(int n) {
int i,y=1;
for(i=2;i*i<=n;i++) {
	if(n%i==0){ 
		y=0;
		break;
		}
	}
	return y;
}
int main(){
int m=90,n=100;
while (m!=(n+1)) {
	if (prime(m) ==1)cout << m << " ";
		m++;
	}
	return 0;
}
第 5 题 若已知一个栈的入栈序列是1,2,3....,n,其输出序列为p1,p2,p3...,pn,若p1=n,则pi为( )。
第 6 题 使用分治法求解不需要满足的条件是( )。
第 7 题 如图,在5x7的方格表中有多少个形状为“
”的图形?( )。
第 8 题 堆的形状是一棵( )。
第 9 题 围着一张圆桌给3名男生,6名女生安排座位,座位没有编号。如果两名男生之间恰有两名女生,共有多少种安排座位的方法( )。
第 10 题 100以内的质数有( )个。
第 11 题 4名嘉宾和2名领导站成一排参加剪彩,其中领导不能相邻,则站位方法总数为( )。
第 12 题 一盒围棋子,4个4个数多3个,6个6个数多5个,15个15个数多14个,棋子在150~200个,棋子共几个? ( )。
第 13 题 数据结构中,“先进先出”是( )结构的特征。
第 14 题 右图所示二叉树的中序序列是( )。
第 15 题 表达式的后缀表达式9 3 1 - 3 * + 10 2 / + 的值为( )。
二、判断题(每题 2 分,共 20 分)
第 16 题
#include<bits/stdc++.h>
using namespace std;
long long normalPower (long long base, long long power) {
	long long result=1;
	for (int i=1; i<=power; i++) {
		result= result *base;
		result=result%1000;
	}
	return result*1000;
}
int main() {
	long long m, n;
	while (true) {
		cin>>m>>n;
		if (m==0 && n==0) break;
		cout<<normalPower (m, n)<<endl;
	}
	return 0;
}
判断题
第 16 题 输出的结果为三位数。( )
第 17 题 将05行的<=改为<则输出结果不变。( )
第 18 题 将第13行true改为1,程序运行结果不会改变。( )
第 19 题 将第15行删除,程序运行结果不会改变。( )
第 20 题 如果输入2和12,则输出结果为多少( )。
第 21 题 (4分)这个算法的时间复杂度为( )。
第 23 题
#include<bits/stdc++.h>
using namespace std;
const int N=1100;
int n,k,m;
int a[N];
int vis[N];
int main()
{
	cin>>n>>k>>m;
	int cnt=0;
	int num=0;
	while (cnt<n-1)
	{
		int cnt2=1 ;
		while (cnt2<=n)   //遍历数组
		{
			int pos=k+cnt2;
			if (pos>n)
			{
				pos=pos-n;
			}
			if(!vis[pos])
			{
				num++;
				if (num%m==0)
				{
					cnt++;
					vis[pos]=1;
					if(cnt==n-1)
						break;
				}
			}
			cnt2++;
		}
	}
	for(int i=1; i<=n; i++)
	{
		if(!vis[i])
		{
			cout<<i<<endl;
			break;
		}		
	}
	return 0;
}
判断题
第 23 题 上述代码中,将第29行==修改为>= ,输出结果一定不变。 ( )
第 24 题 上述代码中,将第29、30行删除,输出结果也一定相同。( )
第 25 题 上述代码中,输入的k值可以大于n。( )
第 26 题 上述代码中,输入的m值可以大于n。( )
第 27 题 当输入为:12 3 8,输出为( )。
第 28 题 (4分)上述代码中,利用数组模拟的是( )。
第 30 题
#include <bits/stdc++.h>
using namespace std;
int select_arr(int arr[],int len, int arr_value)
{
	while (1)
	{
		int left=0;//数组的左侧下标
		int right=len-1;//数组的右侧下标
		while (left<=right)
		{
			int mid=(left+right)/2; //定义 中间位的下标
			int mid_value=arr[mid]; //定义中间值的基准值
			if (mid_value==arr_value)   //如果基准值正好等于要查找的1
			{
				return mid;
			}
			else if (mid_value>arr_value)
			{
				right=mid-1;
			}
			else if (mid_value<arr_value)
			{
				left=mid+1;
			}
		}
		return -1;
	}
}
int main ()
{
	int arr[10]= { 1,3,5,7,9,10,16,46,88,91 };
	int weizhi =select_arr(arr,10,16);
	cout<<weizhi;
	return 0;
}
判断题
第 30 题 数组arr[ ]的值可以为负数。( )
第 31 题 若第31行代码为int arr[10]={ 1,3, 7, 5, 9, 10, 16, 46, 88, 91},输出结果是一样的。( )
第 32 题 数组数值越大,排序效率越低。( )
第 33 题 当数组数据量越大时,和顺序查找相比优势越明显。( )
第 34 题 (4分)程序输出结果为( )。
第 35 题 (4分)该程序的算法为( )。
三、编程题(每题 25 分,共 50 分)
第 37 题 1.有形如:$ax^3+bx^2+cx+d=0 $ 这样的一个一元三次方程。给出该方程中各项的系数(a,b,c,d均为实数),并约定该方程存在三个不同实根(根的范围在-100至100之间),且根与根之差的绝对值≥1。要求由小到大依次在同一行输出这三个实根(根与根之间留有空格),并精确到小数点后2位。 提示:记方程f(x)=0,若存在2个数x1和x2,且x1#include<bits/stdc++.h> using namespace std; double a,b,c,d; double f(__(1)__) //返回一元三次方程值 { return 1.0*a*pow(x,3)+b*pow(x,2)+c*pow(x,1)+d; } double mid(double x, double y) { double st=x,en=y,mid= (st+en)*1.0/2; while ( (double) fabs (f(mid))>0.000001) { if(f(st)*f(mid)>0) { __(2)__; }else if(f(en)*f(mid)>0){ en=mid; } mid=(__(3)__)*1.0/2; } return mid; //找到根 } int main () { cin>>a>>b>>c>>d; double x=-100,y=-100; int num=0; double c[3]; while(__(4)__) { if(f(x)*f(y)>0) { y+=0.9; }else{ c[num]=__(5)__; num++; x=y; } } printf("%.2lf%.2lf%.2lf",c[0],c[1],c[2]); return 0; }
第 37 题 ⑴处应填( )。
第 38 题 ⑵处应填( )。
第 39 题 ⑶处应填( )。
第 40 题 ⑷处应填( )。
第 41 题 ⑸处应填( )。
第 43 题 (dijkstra)给定一个有n个顶点(从1到n编号),m条边的有向图(其中某些边权可能为负,但保证没有负环)。请你计算从1号点到其他点的最短路。
#include <bits/stdc++.h>
using namespace std;
int n,m;
const int ff=0x3f3f3f3f;
long long a[20020];
struct node
{
	int u,v,w;
} mp[100002];
void dj()
{
	a[1]=0;
	for(int i=2;__(1)__; i++)
	{
		int k=-1;
		for(int j=1;__(2)__; j++)
		{
			if (a[mp[j].u]+mp[j].w<a[mp[j].v])
			{
				a[mp[j].v]=__(3)__;
				k=1;
			}
		}
		if(__(4)__)
			break;
	}
	for(int i=2; i<=n; i++)
		cout<<__(5)__<<endl;
}
int main()
{
	cin>>n>>m;
	memset (a, ff,sizeof(a));
	for(int i=1; i<=m; i++)
	{
		cin>>mp[i].u>>mp[i].v>>mp[i].w;
	}
	dj();
	return 0;
}
第 43 题 ⑴处应填( )。
第 44 题 ⑵处应填( )。
第 45 题 ⑶处应填( )。
第 46 题 ⑷处应填( )。
第 47 题 ⑸处应填( )。