#CSP013. 入门级CSP-J第13套初赛模拟试题
入门级CSP-J第13套初赛模拟试题
- 下列关于解释程序和编译程序的四条叙述,其中正确的是( ) {{ select(1) }}
- 解释程序产生目标程序
- 编译程序产生目标程序
- 解释程序和编译程序都产生目标程序
- 解释程序和编译程序都不产生目标程序
- 十进制数(-123)的原码表示为( ) {{ select(2) }}
- 11111011
- 10000100
- 1000010
- 01111011
- 网络管理员排查无法访问www.cisco.com的故障,发现在浏览器中键入web服务器的IP地址可以访问网页,那故障应该归咎于哪个应用层协议( ) {{ select(3) }}
- DHCP
- DNS
- HTTP
- POP3
- 以下程序段执行完毕后,输出的结果是( )
#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;
}
{{ select(4) }}
- 91
- 97
- 91 97
- 91 95 97
- 若已知一个栈的入栈序列是1,2,3...n,其输出序列为p1,p2,p3...pn,若p1=n,则pi为( ) {{ select(5) }}
- i
- n-i
- n-i+1
- 不确定
- 使用分治法求解不需要满足的条件是( ) {{ select(6) }}
- 子问题必须是一样的
- 子问题不能够重复
- 子问题的解可以合并
- 原问题和子问题使用相同的方法解
- 在5×7的方格表中有多少个指定L形的图形?( ) {{ select(7) }}
- 42
- 15
- 76
- 20
- 堆的形状是一棵( ) {{ select(8) }}
- 二叉排序树
- 满二叉树
- 完全二叉树
- 平衡二叉树
- 围着一张圆桌给3名男生,6名女生安排座位,座位没有编号。如果两名男生之间恰有两名女生,共有多少种安排座位的方法( ) {{ select(9) }}
- 392880
- 1440
- 2160
- 720
- 100以内的质数有( )个。 {{ select(10) }}
- 25
- 26
- 27
- 28
- 4名嘉宾和2名领导站成一排参加剪彩,其中领导不能相邻,则站位方法总数为( ) {{ select(11) }}
- 720
- 480
- 120
- 60
- 一盒围棋子,4个4个数多3个,6个6个数多5个,15个15个数多14个,棋子在150~200个,棋子共几个?( ) {{ select(12) }}
- 167
- 179
- 194
- 以上都不对
- 数据结构中,"先进先出"是( )结构的特征。 {{ select(13) }}
- 队列
- 栈
- 线性表
- 树
- 二叉树的中序序列是( ) {{ select(14) }}
- DHEBAFIJCG
- DHEBAFJICG
- DBHEAFCJIG
- DBHEAFJICC
- 表达式的后缀表达式
9 3 1 - 3 * + 10 2 / +的值为( ) {{ select(15) }}
- 45
- 19
- 20
- 51
二、阅读程序(共计40分;判断题每题1.5分,选择题每题3分,特殊标注除外)
(一)普通幂取模
#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. 输出的结果为三位数。( ) {{ select(16) }}
- 正确
- 错误
- 将第05行的
<=改为<则输出结果不变。( ) {{ select(17) }}
- 正确
- 错误
- 将第13行
true改为1,程序运行结果不会改变。( ) {{ select(18) }}
- 正确
- 错误
- 将第15行删除,程序运行结果不会改变。( ) {{ select(19) }}
- 正确
- 错误
选择题 20. 如果输入2和12,则输出结果为多少( ) {{ select(20) }}
- 4
- 96
- 096
- 4096
- (4分)这个算法的时间复杂度为( ) {{ select(21) }}
- O(m*n)
- O(n)
- O(m)
- O(m^n)
(二)约瑟夫环模拟
#include<bits/stdc++.h>
using namespace std;
const int N=1100;
int n,k,m;
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;
}
判断题
22. 上述代码中,将第29行==修改为>=,输出结果一定不变。( )
{{ select(22) }}
- 正确
- 错误
- 上述代码中,将第29、30行删除,输出结果也一定相同。( ) {{ select(23) }}
- 正确
- 错误
- 上述代码中,输入的k值可以大于n。( ) {{ select(24) }}
- 正确
- 错误
- 上述代码中,输入的m值可以很大。( ) {{ select(25) }}
- 正确
- 错误
选择题
26. 当输入为12 3 8,输出为( )
{{ select(26) }}
- 1
- 3
- 8
- 9
- (4分)上述代码中,利用数组模拟的是( ) {{ select(27) }}
- 队列
- 环
- 树
- 以上都不是
(三)二分查找
#include<bits/stdc++.h>
using namespace std;
int select_arr(int arr[],int len,int arr_value)
{
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)
{
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;
}
判断题 28. 数组arr[]的值可以为负数。( ) {{ select(28) }}
- 正确
- 错误
- 若第31行代码为
int arr[10]={1,3,7,5,9,10,16,46,88,91},输出结果是一样的。( ) {{ select(29) }}
- 正确
- 错误
- 数组数值越大,排序效率越低。( ) {{ select(30) }}
- 正确
- 错误
- 当数组数据量越大时,和顺序查找相比优势越明显。( ) {{ select(31) }}
- 正确
- 错误
选择题 32. (4分)程序输出结果为( ) {{ select(32) }}
- 4
- 5
- 6
- 7
- (4分)该程序的算法为( ) {{ select(33) }}
- 顺序查找
- 二分查找
- 哈希查找
- 分块查找
三、完善程序(单选题,每小题3分,共计30分)
(一)一元三次方程求解
有形如 ax³+bx²+cx+d=0 这样的一元三次方程。给出该方程中各项的系数(a,b,c,d均为实数),约定存在三个不同实根,根的范围在-100至100之间,且根与根之差的绝对值≥1。要求由小到大依次输出这三个实根,精确到小数点后2位。
#include<bits/stdc++.h>
using namespace std;
double a,b,c,d;
double f(①) //返回一元三次方程的值
{
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)
{
st= ② ;
}else if(f(en)*f(mid)>0){
en=mid;
}
mid=( ③ )*1.0/2;
}
return mid;
}
int main()
{
cin>>a>>b>>c>>d;
double x=-100, y=-100;
int num=0;
double c[3];
while( ④ )
{
if(f(x)*f(y)>0)
{
y+=0.9;
}else{
c[num]= ⑤ ;
num++;
x=y;
}
}
printf("%.2lf %.2lf %.2lf",c[0],c[1],c[2]);
return 0;
}
- ①处应填( ) {{ select(34) }}
- int x
- float x
- double x
- long long x
- ②处应填( ) {{ select(35) }}
- x
- y
- mid
- en
- ③处应填( ) {{ select(36) }}
- x+y
- y
- st+en
- en
- ④处应填( ) {{ select(37) }}
- num<1
- num<2
- num<3
- num<4
- ⑤处应填( ) {{ select(38) }}
- f(x)*f(y)
- x
- mid(x,y)
- y
(二)Bellman-Ford 最短路
给定一个有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[200002];
void dj ()
{
a[1]=0;
for(int i=2; ① ;i++)
{
int k=-1;
for(int j=1; ② ;j++)
{
if(a[mp[j].u]+mp[j].w < a[mp[j].v])
{
a[mp[j].v]= ③ ;
k=1;
}
}
if( ④ )
break;
}
for(int i=2;i<=n;i++) cout<< ⑤ <<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;
}
- ①处应填( ) {{ select(39) }}
- i<n
- i<=n
- i<m
- i<=m
- ②处应填( ) {{ select(40) }}
- j<n
- j<=n
- j<m
- j<=m
- ③处应填( ) {{ select(41) }}
- a[mp[j].u] + mp[j].w
- a[mp[j].v] + mp[j].w
- a[mp[i].u] + mp[i].w
- a[mp[i].v] + mp[i].w
- ④处应填( ) {{ select(42) }}
- k==0
- k==1
- k==-1
- k==2
- ⑤处应填( ) {{ select(43) }}
- mp[i].v
- a[i]
- mp[i].u
- mp[a[i]].u
粤公网安备44195502000195号