#4455. 普及组 CSP-J 第6套初赛模拟试题
普及组 CSP-J 第6套初赛模拟试题
一.单项选择题
共15题,每题2分,共30分;每题有且仅有一个正确选项。
- 在计算机内部用来传送、存贮、加工处理的数据或指令都是以( )形式进行的。 {{ select(1) }}
- 二进制码
- 八进制码
- 十进制码
- 智能拼音码
- 计算机的软件系统通常分为( )。 {{ select(2) }}
- 硬件系统和软件系统
- 高级软件和一般软件
- 系统软件和应用软件
- 军用软件和民用软件
- 关于软盘读写孔,正确的说法是( )。
{{ select(3) }}
- 从该孔读信息
- 从该孔写信息
- 当该孔处于开状态时,不能删除盘中文件
- 该孔没有作用
- 一棵二叉树的中序遍历为DGBAECHF,后序遍历为GDBEHFCA,则前序遍历是( )。
{{ select(4) }}
- ABCDFGHE
- ABDGCEFH
- ACBGDHEF
- ACEFHBGD
- 下列叙述中错误的是( )
{{ select(5) }}
- 微机应避免置于强磁场之中
- 微机使用时间不宜过长,而应隔几个小时关机一次
- 微机应避免频繁关开,以延长其使用寿命
- 微机应经常使用,不宜长期闲置不用
- 计算机网络最主要的优点是( )
{{ select(6) }}
- 运算速度快
- 共享资源
- 精度高
- 存储容量大
- 下列4个不同进制表示的数中,最大的一个数是( )。 {{ select(7) }}
- ( 220.1 )₁₀
- ( 11011011.1)₂
- ( 334.1)₈
- ( DC.1)₁₆
- 为了区分汉字与ASCII码,计算机中汉字编码的最高位为( )。
{{ select(8) }}
- 1
- 0
- -1
- 2
- 一般来说,TCP/IP的IP提供的服务是( )。
{{ select(9) }}
- 运输层服务
- 会话层服务
- 表示层服务
- 网络层服务
-
通信时,模拟信号也可以用数字信道来传输,能实现模拟信号与数字信号之间转换功能的是( )。
{{ select(10) }}
- D/A
- A/D
- Modem
- Codec
- 一个栈的输入顺序为1、2、3、4、5,下列序列中可能是栈的输出序列是( )。 {{ select(11) }}
- 54312
- 24135
- 21543
- 12534
- 不属于Internet的功能是( )。 {{ select(12) }}
- 聊天
- 远程教育
- 查询资料
- 传送能量
- 下列描述计算机病毒的特性中,( )不是正确的。
{{ select(13) }}
- 潜伏性
- 传染性
- 高速性
- 危害性
- 下面不属于网络操作系统的是( )。 {{ select(14) }}
- UNIX
- WINDOWS NT
- NETWARE
- DOS
- 根据《计算机软件保护条例》,中国公民开发的软件享有著作权的是( )。 {{ select(15) }}
- 不论何人、何地及发表与否的软件
- 只有公开发表的软件
- 只有单位发表的软件
- 只有个人在国内公开发表的软件
二、阅读程序
程序输入不超过数组或字符串定义的范围;除特殊说明外,判断题1.5分,选择题4分,共计40分
(1)
#include<iostream>
using namespace std;
const int Maxn =10005;
int n,b[Maxn];
inline void mergesort(int *a, int 1, int r)
{
if(1 ==r) return;
int mid =1+r>>1;
mergesort(a,1, mid);
mergesort(a, mid+1,r);
int i =1,j= mid + 1, cnt = 0;
while(i<=mid &&j<=r)
{
if ( a[i] < = a[j] )
b[++ cnt] = a[i+ +];
else b[++cnt] = a[j++];
}
while(i<=mid)
b[++cnt] =a[i++];
while(j <= r)
b[++cnt] = a[j++];
for( i = 1;i < = r;i+ +)
a[i] = b[i -1+ 1];
}
int a[Maxn];
int main(void)
{
cin>>n;
for(int i = 1;i < = n;i++)
cin >>a[i];
mergesort(a,1,n);
for ( int i=1;i< =n;i++)
cout << a[i] << [i]== n?'\n' :' ' ;
return 0;
}
- 该算法中“int *a”没有传值。( ) {{ select(16) }}
- 正确
- 错误
- 该算法会换行。( ) {{ select(17) }}
- 正确
- 错误
- 该算法中mergesort函数时间复杂度为O(nlogn)。( ) {{ select(18) }}
- 正确
- 错误
- 如果输入为“5 4 3 9 7 8”则输出为3 4 7 8 9\n。( ) {{ select(19) }}
- 正确
- 错误
- 下面哪句与“ i==n ? '\n' : ' ' ”相同( ) {{ select(20) }}
- i !=1 ? '\n' : ' '
- " \n"[i==n]
- " \n"[i!=n]
- ' '
- 该算法的最劣复杂度与哪个排序算法相同( ) {{ select(21) }}
- 快速排序
- 选择排序
- 计数排序
- 堆排序
(2)
#include<iostream>
using namespace std;
int i,j,k,n,m,f[10010],p1,p2,p3;
int find(int k){
if(f[k]==k)
return k;
return f[k]=find(f[k]);
}
int main()
{
cin>>n>>m;
for( i=1;i< =n;i+ +)
f[i]=i;
for( i=1;i< =m;i++){
cin>>p1>>p2>>p3;
if(p1==1)
f[find(p2)]=find(p3);
if(p1==2)
if(find(p2)==find(p3))
printf("Y\n");
else
printf("N\n");
}
return 0;
}
- 该算法中p1的作用是确定操作类型。( ) {{ select(22) }}
- 正确
- 错误
- 去掉for(i=1;i<=n;i++)f[i]=i;对该算法没有影响。( ) {{ select(23) }}
- 正确
- 错误
- 输入2 2 1 1 2 2 1 2输出为Y。( ) {{ select(24) }}
- 正确
- 错误
- 输入2 1 2 1 2输出为N。( ) {{ select(25) }}
- 正确
- 错误
- 该算法时间复杂度为( ) {{ select(26) }}
- O(mlogn)
- O(nm)
- O(n+m)
- O(nm²)
- 把return f[k]=find(f[k]);改成return find(f[k]);最差时间复杂度为( ) {{ select(27) }}
- O(mlogn)
- O(nm)
- O(n+m)
- O(nm²)
(3)
#include<iostream>
using namespace std;
int t,x[100] ,a[100];
void work(int d, int i, int n)
{
int k;
if( n= =1)
{
for(k=0;k<d;k++)
printf("%3d",a[k]);
printf("\n");
}
else
for(k=i;k<t;k++)
if(n%x[k]==0)
{
a[d] =x[k];
work(d+1,k,n/x[k]);
}
}
int main( )
{
int i,k,n;
cin>>n;
for( i=n;i>1;i-- )
if( n%i==0)
x[t++]=i;
work(0,0,n);
}
- for(i=n;i>1;i--) if(n%i==0) x[t++]=i;作用是求出n的所有因数。 {{ select(28) }}
- 正确
- 错误
- 该程序的作用是对n进行质因数分解。( ) {{ select(29) }}
- 正确
- 错误
- printf("%3d",a[k]);中去掉3对程序没有影响。( ) {{ select(30) }}
- 正确
- 错误
- 去掉if(n%x[k]==0)对程序有影响。( ) {{ select(31) }}
- 正确
- 错误
- 如果输入为2,那么输出为( )
{{ select(32) }}
- 2
- 2 1
- 1 2
- 2 2
- 如果输入为72,那么输出的非回车字符有多少行( ) {{ select(33) }}
- 14
- 15
- 16
- 17
三、完善程序
单选题,除特殊说明外,每小题3分,共计30分。
(1)(坐标统计) 输入n个整点在平面上的坐标。对于每个点,可以控制所有位于它左下方的点(即x、y坐标都比它小),它可以控制的点的数目称为“战斗力”。依次输出每个点的战斗力,最后输出战斗力最高的点的编号(如果若干个点的战斗力并列最高,输出其中最大的编号)
#include<bits/stdc++.h>
using namespace std;
const int SIZE =100;
int x[SIZE],y[SIZE],f[SIZE];
int n,i,j,max_f,ans;
int main()
{
cin>>n;
for( i=1;i< =n;i++)
cin>>x[i]>>y[i];
max_f=0;
for( i=1;i< =n;i++)
{
f[i]= [ ① ] ;
for(j=1;j< =n;j++)
{
if(x[j]<x[i]&& ②)
[ ③ ];
}
if( ④ )
{
max_f=f[i];
[ ⑤ ];
}
}
for(i=1;i<=n;i++)
cout<<f[i]<<endl;
cout<<ans<<endl;
return 0;
}
- ①处应填() {{ select(34) }}
- 0
- 1
- i
- INT_MAX
- ②处应填() {{ select(35) }}
- y[j]<=y[i]
- y[j]<y[i]
- y[j]>y[i]
- y[j]>=y[i]
- ③处应填() {{ select(36) }}
- ans=i
- f[i]++
- f[i]--
- ans++
- ④处应填() {{ select(37) }}
- (f[i] > max_f)
- (f[i] >= max_f)
- (f[i] < max_f)
- (f[i] <= max_f)
- ⑤处应填() {{ select(38) }}
- ans++
- ans+= max_f
- ans=i
- ans= max_f
(2)(排列数) 输入两个正整数n,m(1<n<20,1<m<n),在1~n中任取m个数,按字典序从小到大输出所有这样的排列。 例如:
输入:
3 2
输出:
1 2
1 3
2 1
2 3
3 1
3 2
#include<iostream>
#include<cstring>
using namespace std;
const int SIZE=25;
bool used[SIZE];
int data[SIZE];
int n,m,i,j,k;
bool flag;
int main()
{
cin>>n>>m;
memset(used, false, sizeof(used));
for( i=1;i< =m;i++)
{
data[i]=i;
used[i]=true;
}
flag=true;
while(flag)
{
for( i=1;i< =m-1;i++)
cout<<data[i]<<" ";
cout<<data[m]<<endl;
flag=[ ① ];
for( i=m;i>=1;i--)
{
[ ② ];
for(j=data[i]+1;j<=n;j++)
if( !used[j])
{
used[j]=true;
data[i]=[ ③ ];
flag=true;
break;
}
if(flag)
{
for(k=i+1;k<=m;k++)
for(j=1;j<=[④ ];j++)
if(!used[j])
{
data[k]=j;
used[j]=true;
break;
}
[ ⑤ ];
}
}
}
return 0;
}
- ①处应填() {{ select(39) }}
- false
- true
- 1
- -1
- ②处应填( ) {{ select(40) }}
- used[i]=true
- data[i]=i
- used[data[i]]=true
- used[data[i]]=false
- ③处应填( ) {{ select(41) }}
- j
- i
- true
- false
- ④处应填( ) {{ select(42) }}
- n
- m
- i
- j
- ⑤处应填( ) {{ select(43) }}
- return 0
- exit
- continue
- break