#CSP7. CSP-J 模拟7
CSP-J 模拟7
一、单项选择题(共15题,每题2分,共计30分;每题有且仅有一个正确选项)
1.在标准ASCII码表中,字符'4'的ASCII码值用二进制表示是( )。 {{ select(1) }}
- A.00000100
- B.00110100
- C.00110101
- D.00110011
2.关于树这种数据结构的下述说法,正确的是( )。 {{ select(2) }}
- A.一个有m个顶点和m-1条边的图就是树
- B.树中的任意两个顶点之间有且只有一条简单路径
- C.树中有的结点可能构成环
- D.若树根层次为1,则对应高度为n的二叉树最多有2”个结点
- 以下哪个不是输入设备?( ) {{ select(3) }}
- A.绘图仪
- B.触摸屏
- C.扫描仪
- D.麦克风
4.当a=3,b=2.c=l时,执行以下程序段后c=(){{ select(4) }}
if(a>b)
a=b;
if(b>c)
b=C;
else
c=b;
c=a--;
- A.0
- B.1
- C.2
- D.3
5.学生在大学选修某些课程时需要先上其他的前置课程,所有课程和课程间的先修关 系构成一个有向图G,有向边<M,N>表示课程M是课程N的先修课,则要找到某 门课程L的全部先修课,下面哪种算法不可行?() {{ select(5) }}
- A. Dijkstra
- B. BFS
- C.DFS
- D.BFS+DFS
6.下列对语句freopen("function.in","r",stdin);的分析中正确的是( ) {{ select(6) }}
- A.freopen是文件名
- B.function.in是重定向函数名
- C.r代表重定向为“写”方式
- D.语句将cin重定向到文件function.in
7.Windows下可执行文件的扩展名是( )。 {{ select(7) }}
- A.com
- B.exe
- C.cpp
- D.dll
8.[x]补码=10011000,其原码为()。 {{ select(8) }}
- A.011001111
- B.11101000
- C.11100110 .
- D.01100101
9.下面有关布尔类型的函数的说法,正确的是( )。 {{ select(9) }}
- A.布尔类型函数只能返回0和1两个值
- B.布尔类型函数可以返回负数
- C.布尔类型函数必须有参数传递
- D.布尔类型函数可以返回 NULL
10.下面有关格雷码的说法,错误的是( )。 {{ select(10) }}
- A.在格雷码中,任意两个相邻的代码只有一位二进制数不同
- B.格雷码是一种可靠性编码
- C.在格雷码中,最大数和最小数只有一位二进制数不同
- D.格雷码是一种唯一性编码
11.现在有5个整数-2,-1,0,1,2,从中任意挑选两个整数,它们的和为0的概率是多少? () {{ select(11) }}
- A.1/6
- B.1/4
- C.1/5
- D.1/10
12.小明走楼梯,每次上台阶能跨1或2级。下面是走到第N步台阶的C++实现代码该段代码采用的是( )算法。 {{ select(12) }}
int UpStairs(int N)
{
if(N==1)
return 1;
else if(N==2)
return 2;
else
return UpStairs(N-2)+ UpStairs(N-1);
}
- A.递推
- B.贪心
- C.动态规划
- D.分治
13.某内容中仅会出现A,B,C,D,E,F,G,对应的出现概率分别为0.40,0.30,0.15,0. 0.04,0.03,0.03,如下图所示。按照哈夫曼编码规则,假设B的编码为11,则D编码为( )。 {{ select(13) }}
- A.10010
- B.10011
- C.10111
- D.10001
14.某学习小组有5名男生和3名女生,从中选3名男生和1名女生参加3项竞赛活动每项活动至少有1人参加,则参赛方法有( )种。 {{ select(14) }}
- A.960
- B.1080
- C.2160
- D.540
15.简单无向连通图G有18条边,且每个顶点的度数为2.则图G有( )个顶点。 {{ select(15) }}
- A.81
- B.17
- C.18
- D.64
二、阅读程序(程序输入不超过数组或字符串定义的范围:判断题正确填V,错误填x除特殊说明外,判断题每题1.5分,选择题每题3分,共计40分)
(1)
#includecbits/stdc++.h>
using namespace std;
int a[101000];
int p(int deep){
return pow(2,deep);
}
int main(){
int n,mindeep=1,1=2,deep=2;
scanf("%d %d”,5n,&a[1]);
long long maxx = a[1];
for(i=2;i<=n;i++)
scanf("%d”,Sa[i]);
i=2;
while(i<=n){
long long sum=0;
for(;i<p(deep)68i<=n;i++)
sum+=a[i];
if(sum > maxx)
maxx = sum, mindeep = deep;
deep++;
}
cout << mindeep;
return 0;
}
判断题 16.将第8行中的i=2改为i,程序的运行结果不会改变。 () {{ select(16) }} 17如果输入都是正整数,那么将第10行中的a[1]替换成a[0],将第13行中的i=2 替换成i=1,程序的运行结果不会改变。 () {{ select(17) }} 18.将第15 行中的long long sum=0;替换成long long sum;,程序的运行结果不会改变 ( ) {{ select(18) }} 19.将第 18 行中的 if(sum > maxx)替换成 if(sum >= maxx),程序的运行结果不会改变 () {{ select(19) }} 选择题 20 若输入为71654 3 2 1,则输出为() {{ select(20) }}
- A11
- B.2
- C.10
- D.3
21.若输入为1594533212111 11 1 1,则输出为() {{ select(21) }}
- A4
- B.3
- C.2
- D.1
(2)
#include <bits/stdc++.h>
using namespace std;
bool judge(int a)
{
while(al=0)
{
int t = a%10;
if(t==2 ll t==4)
return 0;
a = a/10;
}
return 1;
}
int main(void)
{
int sum=0,n;
cin>>n;
for(int i=l;icn/3+1;i++)
if(judge(i))
for(int j=i+1;j<n-i-j;j++)
if(judge(j) 86 judge(n-i-j))
sum++;
coutc<sum;
return 0;
}
判断题 22 将judge 函数和main函数的位置调换一下,程序的运行不受影响 {{ select(22) }} 23.将第3行中的bool改为int,程序的运行结果不会改变。 {{ select(23) }} 24 该程序运行的时间复杂度是O(nlogn) {{ select(24) }} 25 将第20行中的j=1+1改为j=1,程序的运行结果不会改变 {{ select(25) }} 选择题 26.若输入n=24,则程序的输出为() {{ select(26) }}
- 15
- B.16
- C.14
- D.13
27.若程序的输出为20,则程序的输入可能为() {{ select(27) }}
- 38
- B.41
- C.40
- D.42
(3)
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
int a[100005],b[100005],c[100005];
int small(int n, int a[], int key)
{
int left=1, right=n;
while(left < right)
{
int mid = (left+right+1)/2;
if(a[mid]< key)
left = mid;
else
right = mid - 1;
return left;
}
}
int big(int n, int c[], int key)
{
int left=1, right=n;
while(left < right)
{
int mid = (left+right)/2;
if(c[mid] > key)
ght = mid;
else
left = mid + 1;
}
return left;
}
int main()
{
int n;
cin>>n;
for(int i=l;i<=n;++i)
cin>a[i];
for(int i=1;ic=n;++i)
cin>>b[i];
for(int i=1;ic=n;++i)
cin>>c[i];
sort(a+1,a+n+1);
sort(b+1,b+n+1);
sort(c+1,C+n+1);
LL count = 0;
for(int i=1;i<=n;i++)
{
int key = b[i];
LL wa = small(n,a,key);
LL wc = big(n,c,key);
if(a[wa] < key 65 c[wc] > key)
count += wa*(n+1-wc);
}
cout<<count<kendl;
return 0;
}
判断题 28.若将第8行中的while(left< right)替换为while(left<= right),程序的运行结果不会改变 ( ) {{ select(28) }} 29.若将第10行中的(left+right+1)/2替换为left+right+1>>1,程序的运行结果不会改变 ( ) {{ select(29) }} 30.若将第23行中的(left+right)/2替换为left+(right-left)/2,程序的运行结果不会改变 ( ) {{ select(30) }} 31.若将第48行中的small(n,a,key)替换为(lower_bound(a+1,a+n+1,b[i])-a)-1,程序的运行结果不会改变 ( ) {{ select(31) }} 选择题 32.本程序运行的时间复杂度是( ) {{ select(32) }}
- 0(1)
- B.O(n)
- C.o(n^2)
- D.O(nlogn)
33.若输入3111222333,那么输出结果是 {{ select(33) }}
- 27
- B.21
- C.18 )
- D.15
34.(4分)若输入3123345 5 67,那么输出结果是() {{ select(34) }}
- A.27
- B.21
- A.18
- D.15
三、完善程序(单选题,每小题3分,共计30分)
(1)一个nxn的正方形的黑白瓦片的图案要被转换成新的正方形图案。写一个程序来找出将原始图案按照下列转换方法转换成新图案所采用的最小序号的方式。 ①转90°:图案顺时针旋转90°。 ②转180°:图案顺时针旋转180°。 3转270°:图案顺时针旋转270°。 ④反射:图案在水平方向翻转(以中央铅垂线为中心形成原图案的镜像)。 5组合:图案在水平方向翻转,然后再按照①-③中的一种再次转换。 ⑥不改变:原图案不改变。 ⑦无效转换:无法用以上方法得到新图案。 如果有多种可用的转换方法,请选择序号最小的那个。 只使用上述7种步骤中的一个来完成这次转换。 输入格式: 第1行一个正整数n。然后是n行,每行n个字符,全部为@或-,表示初始的 正方形。接下来的n行,每行n个字符,全部为@或-,表示最终的正方形。输出格式: 单独的一行包括1~7中的一个数字(在上文已描述),表明需要将转换前的正 方形变为转换后的正方形的转换方法。 输入样例: @-@ 一 @@- @-@ -@ 输出样例: 1 数据范围: 对于 100%的数据,1<n<10。
#include<bits/stdc++.h>
using namespace std;
int n;
char a[15][15],b[15][15],c[15][15],d[15][15];
bool work1(){
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
①;
for(int i=1;ic=n;i++)
for(int j=1;jc=n;j++)
if(b[i][j]!=c[i][j]) return 0;
return 1;
}
bool work2( ){
for(int i=1;ic=n;i++)
for(int j=1;jc=n;j++)
②;
for(int i=1;i<=n;i++)
for(int j=1;jc=n;j++)
if(b[i][j]!=c[i][j]) return 0;
return 1;
}
bool work3(){
for(int i=1;i<=n;i++)
for(int j=1;jc=n;j++)
③;
for(int i=1;ic=n;i++)
for(int j=1;jc=n;j++)
if(b[i][j]!=c[i][j]) return 0;
return 1;
}
bool work4(){
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
④;
for(int i=1;ic=n;1++)
for(int j=1;jk=n;j++)
if(b[i][j]!=c[i][j])
return 1;
return 0;
}
bool work5(){
for(int i=l;ic=n;i++)
for(int j=1;jc=n;j++)
a[i][j]=b[i][j];
work1()) return 1;
for(int i=1;ic=n;i++)
for(int j=l;j<=n;j++) a[i][j]=b[i][j];
if(work2()) return 1;
for(int i=1;ik=n;i++)
for(int j=1;jc=n;j++) a[i][j]=b[i][j];
if(work3()) return 1;
return 0;
}
bool work6(){
for(int i=1;i<=n;i++)for(int j=l;j<=n;j++)if(b[i][j]!=c[i][j]) return 0;
return 1;
}
void work(){
if(work1())cout<<1;return;
if(work2())cout<<2; return;
if(work3())fcout<<3;return;
if(work4())cout<<4;return;
if(work5())fcout<<5; return;
if(work6()) fcout<<6;return;
cout<<7;
}
int main(){
cin>>n;
for(int i=l;ic=n;i++)
for(int j=1;j<=n;j++)
cin>>ali][j];d[i][j]=a[i][j];
for(int 1=1;i<=n;1++)
for(int j=1;j<=n;)++)cin>>c[i][j];
work( );
return 0;
}
35.①处应填()。 {{ select(35) }}
- A.blj][n-i+1j=a[jj[i]
- B.b[j][n-i]=a[j][i]
- C.b[j][n-i+1]=a[ij[j]
- D.b[j][n-i]=a[i][j]
36.②处应填()。 {{ select(36) }}
- A.b[n-i][n-j】=a[i][j]
- B.b[n-i+1][n-j+1]=a[i][j]
- C.b[n-i)[n-j] = a[j][i]
- D.b[n-j+1][n-i+1]=a[i][j]
37.3处应填() {{ select(37) }}
- A.b[n-j+1][iJ=a[i][j]
- B.b[n-j][i]=a[i][j]
- C.b[n-j+1][iJ=alj][i]
- D.b[n-j][i]=a[j][i]
38.④处应填( ) {{ select(38) }}
- A.b[n-j+1][iJ=a[i][ j]
- B.b[i][n-j]=a[i][j]
- C.b[i】[n-j+1J=a[i][j]
- D.b[i][n-j]=a[j][i]
39 5处应填( ) {{ select(39) }}
- A.work1( )
- B.work2( )
- C.work3()
- D.work4()
(2)一个旅行家想驾驶汽车以最少的费用从一个城市到另一个城市(假设出发时油箱是 空的)给定两个城市之间的距离D、汽车油箱的容量C(以升为单位)、每升汽 能行驶的距离D、出发点每升汽油的价格P 沿途加油站数N(N可以为零)、加油 站1高出发点的距离D,每升汽油的价格P(=12··N)计算结果四舍五入至 数点后两位。如果无法到达目的地,则输出 No Solution 输人格式: 第1行,D.C,D、P.N.接下来有N行第+1行,两个数字,即加油站;离出发点的距离D和每升汽油的价格 P 输出精式: 所需的最少费用,计算结果四舍五入至小数点后两位。如果无法到达目的地, 则输出 No Solution 输入神例: 2756119274282 182029 22002.2 输出样例: 26.95 说明/提示: N<6,其余数字<500.
#include<bits/stdc++.h>
using namespace std;
const int MAXN = 100;
int N;
double D[MAXN], P[MAXN], D1, C, per, req;
int main(){
cin>>D1>>C>>per>>P[0]>>N;
D1 /= per;
for(int i=1; ic=N;i++) {
cin>>D[i]>>P[i];
D[i] /= per;
}
D[0]= 0;
①;
P[N+1] = 0;
double cur = 0, ans = 0;
for(int i=0; i<=N;i++) {
int ni = N+1;
for(int j=i+1;j<= N+1;j++)
if(P[j]<= P[i])
ni=j;
break;
②;
if(req> C)
③;
if(req > cur){
ans +=(req - cur)* P[i];
cur = req;
}
④;
if(cur<0)
break;
}
if(cur < 0)
cout<<"No Solution"<<endl;
else
⑤;
return 0;
}
40.①处应填( )。 {{ select(40) }}
- A.D[N]= D1
- B.D[N+1]= D1
- C.D[1]=D1
- D.D[N-1]= D1
41.②处应填( ) {{ select(41) }}
- A.req = D[i] - D[i-1]
- B.req= D[i+1] - D[i]
- C.req =D[ni] + D[i]
- D.req= D[ni]- D[i]
42.③处应填()。 {{ select(42) }}
- A.req=C
- B.req -= C
- C.req += C
- D.req %= C
43.④处应填( )。 {{ select(43) }}
- A.cur +=D[i+1]- D[i]
- B.cur -= D[i+1]- D[i]
- C.cur += D[ni] - D[i]
- D.cur -= D[ni] - D[i]
44.⑤处应填( ) {{ select(44) }}
- A.printf("%.2d\n",ans)
- B.printf(“%21f\n",ans)
- C.coutccfixedkesetprecision(2)<<ans<<endL;
- D.coutcefixedcksetprecision(3)kcanskkendl;
Statistics
Related
In following contests: