CSP-J 初赛模拟赛7
You cannot submit for this problem because the contest is ended. You can click "Open in Problem Set" to view this problem in normal mode.
一、单项选择题(共15题,每题2分,共计30分;每题有且仅有一个正确选项)
- 在标准ASCII码表中,字符'4'的ASCII码值用二进制表示是( )。 {{ select(1) }}
- A. 00000100
- B. 00110100
- C. 00110101
- D. 00110011
- 关于树这种数据结构的下述说法,正确的是( )。 {{ select(2) }}
- A. 一个有 个顶点和 条边的图就是树
- B. 树中的任意两个顶点之间有且只有一条简单路径
- C. 树中有的结点可能构成环
- D. 若树根层次为 ,则对应高度为 的二叉树最多有 个结点
- 以下哪个不是输入设备?( ) {{ select(3) }}
- A. 绘图仪
- B. 触摸屏
- C. 扫描仪
- D. 麦克风
- 当
a=3, b=2, c=1
时,执行以下程序段后c=()
if(a>b)
a=b;
if(b>c)
b=C;
else
c=b;
c=a--;
{{ select(4) }}
- A. 0
- B. 1
- C. 2
- D. 3
- 学生在大学选修某些课程时需要先上其他的前置课程,所有课程和课程间的先修关 系构成一个有向图 ,有向边 表示课程 是课程 的先修课,则要找到某 门课程 的全部先修课,下面哪种算法不可行?() {{ select(5) }}
- A. Dijkstra
- B. BFS
- C. DFS
- D. BFS+DFS
- 下列对语句
freopen("function.in","r",stdin)
;的分析中正确的是( ) {{ select(6) }}
- A. freopen是文件名
- B. function.in是重定向函数名
- C. r代表重定向为“写”方式
- D. 语句将cin重定向到文件function.in
- Windows下可执行文件的扩展名是( )。 {{ select(7) }}
- A. com
- B. exe
- C. cpp
- D. dll
- [x]补码=10011000,其原码为()。 {{ select(8) }}
- A. 011001111
- B. 11101000
- C. 11100110 .
- D. 01100101
- 下面有关布尔类型的函数的说法,正确的是( )。 {{ select(9) }}
- A. 布尔类型函数只能返回0和1两个值
- B. 布尔类型函数可以返回负数
- C. 布尔类型函数必须有参数传递
- D. 布尔类型函数可以返回 NULL
- 下面有关格雷码的说法,错误的是( )。 {{ select(10) }}
- A. 在格雷码中,任意两个相邻的代码只有一位二进制数不同
- B. 格雷码是一种可靠性编码
- C. 在格雷码中,最大数和最小数只有一位二进制数不同
- D. 格雷码是一种唯一性编码
- 现在有 个整数 从中任意挑选两个整数,它们的和为0的概率是多少? () {{ select(11) }}
- A.1/6
- B.1/4
- C.1/5
- D.1/10
- 小明走楼梯,每次上台阶能跨 或 级。下面是走到第 步台阶的C++实现代码该段代码采用的是( )算法。
int UpStairs(int N)
{
if(N==1)
return 1;
else if(N==2)
return 2;
else
return UpStairs(N-2)+ UpStairs(N-1);
}
{{ select(12) }}
- A.递推
- B.贪心
- C.动态规划
- D.分治
- 某内容中仅会出现 ,对应的出现概率分别为 ,如下图所示。按照哈夫曼编码规则,假设 的编码为 ,则 编码为( )。
{{ select(13) }}
- A.10010
- B.10011
- C.10111
- D.10001
- 某学习小组有 名男生和 名女生,从中选 名男生和 名女生参加 项竞赛活动每项活动至少有 人参加,则参赛方法有( )种。 {{ select(14) }}
- A. 960
- B. 1080
- C. 2160
- D. 540
- 简单无向连通图 有 条边,且每个顶点的度数为 .则图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,i=2,deep=2; //第8行
scanf("%d %d”,&n,&a[1]);
long long maxx = a[1]; //第10行
for(i=2;i<=n;i++)
scanf("%d”, &a[i]);
i=2;
while(i<=n){
long long sum=0; //第15行
for(;i<p(deep)&&i<=n;i++)
sum+=a[i];
if(sum > maxx)
maxx = sum, mindeep = deep;
deep++;
}
cout << mindeep;
return 0;
}
判断题
- 将第 行中的
i=2
改为i
,程序的运行结果不会改变。 () {{ select(16) }}
- true
- false
- 如果输入都是正整数,那么将第 行中的
a[1]
替换成a[0]
,将第 行中的i=2
替换成i=1
,程序的运行结果不会改变。 () {{ select(17) }}
- true
- false
18.将第 行中的 long long sum=0;
替换成 long long sum;
,程序的运行结果不会改变 ( ) {{ select(18) }}
- true
- false
19.将第 行中的 if(sum > maxx)
替换成 if(sum >= maxx)
,程序的运行结果不会改变 () {{ select(19) }}
- true
- false
选择题
20 若输入为 7 1 6 5 4 3 2 1
,则输出为() {{ select(20) }}
- A. 11
- B. 2
- C. 10
- D. 3
21.若输入为15 9 4 5 3 3 2 1 2 1 1 1 1 1 1 1
,则输出为() {{ select(21) }}
- A. 4
- B. 3
- C. 2
- D. 1
(2)
#include <bits/stdc++.h>
using namespace std;
bool judge(int a)
{
while(a!=0)
{
int t = a%10;
if(t==2 || t==4)
return 0;
a = a/10;
}
return 1;
}
int main(void)
{
int sum=0,n;
cin>>n;
for(int i=l;i<n/3+1;i++)
if(judge(i))
for(int j=i+1;j<n-i-j;j++)
if(judge(j) && judge(n-i-j))
sum++;
coutc<sum;
return 0;
}
判断题
- 将 judge 函数和 main 函数的位置调换一下,程序的运行不受影响 {{ select(22) }}
- true
- false
- 将第 行中的bool改为int,程序的运行结果不会改变。 {{ select(23) }}
- true
- false
- 该程序运行的时间复杂度是 {{ select(24) }}
- true
- false
- 将第 行中的
j=1+1
改为j=1
,程序的运行结果不会改变 {{ select(25) }}
- true
- false
选择题
- 若输入
n=24
,则程序的输出为() {{ select(26) }}
- A. 15
- B. 16
- C. 14
- D. 13
- 若程序的输出为
20
,则程序的输入可能为() {{ select(27) }}
- A. 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) //第8行
{
int mid = (left+right+1)/2; //第10行
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; //第23行
if(c[mid] > key)
right = 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;i<=n;++i)
cin>>b[i];
for(int i=1;i<=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); //第48行
LL wc = big(n,c,key);
if(a[wa] < key && c[wc] > key)
count += wa*(n+1-wc);
}
cout<<count<kendl;
return 0;
}
判断题
28.若将第 行中的 while(left< right)
替换为 while(left<= right)
,程序的运行结果不会改变 ( ) {{ select(28) }}
- true
- false
29.若将第 行中的 (left+right+1)/2
替换为 left+right+1>>1
,程序的运行结果不会改变 ( ) {{ select(29) }}
- true
- false
30.若将第 行中的 (left+right)/2
替换为 left+(right-left)/2
,程序的运行结果不会改变 ( ) {{ select(30) }}
- true
- false
31.若将第 行中的 small(n,a,key)
替换为 (lower_bound(a+1,a+n+1,b[i])-a)-1
,程序的运行结果不会改变 ( ) {{ select(31) }}
- true
- false
选择题
32.本程序运行的时间复杂度是( ) {{ select(32) }}
- A.
- B.
- C.
- D.
33.若输入 3 1 1 1 2 2 2 3 3 3
,那么输出结果是 {{ select(33) }}
- A. 27
- B. 21
- C. 18
- D. 15
34.(4分)若输入3 1 2 3 3 4 5 5 6 7
,那么输出结果是() {{ select(34) }}
- A. 27
- B. 21
- A. 18
- D. 15
三、完善程序(单选题,每小题3分,共计30分)
(1)一个nxn的正方形的黑白瓦片的图案要被转换成新的正方形图案。写一个程序来找出将原始图案按照下列转换方法转换成新图案所采用的最小序号的方式。
①转90°:图案顺时针旋转90°。
②转180°:图案顺时针旋转180°。
③转270°:图案顺时针旋转270°。
④反射:图案在水平方向翻转(以中央铅垂线为中心形成原图案的镜像)。
⑤组合:图案在水平方向翻转,然后再按照①-③中的一种再次转换。
⑥不改变:原图案不改变。
⑦无效转换:无法用以上方法得到新图案。
如果有多种可用的转换方法,请选择序号最小的那个。
只使用上述7种步骤中的一个来完成这次转换。
输入格式:
第1行一个正整数n。然后是n行,每行n个字符,全部为@或-,表示初始的 正方形。接下来的n行,每行n个字符,全部为@或-,表示最终的正方形。输出格式: 单独的一行包括1~7中的一个数字(在上文已描述),表明需要将转换前的正 方形变为转换后的正方形的转换方法。
输入样例:
3
@-@
---
@@-
@-@
@--
--@
输出样例:
1
数据范围:
对于 100%的数据,。
#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;i<=n;i++)
for(int j=1;j<=n;j++)
if(b[i][j]!=c[i][j]) return 0;
return 1;
}
bool work2( ){
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
②;
for(int i=1;i<=n;i++)
for(int j=1;j<=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;j<=n;j++)
③;
for(int i=1;i<=n;i++)
for(int j=1;j<=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;i<=n;1++)
for(int j=1;j<=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];
if(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=1;i<=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;
}
- ①处应填()。 {{ select(35) }}
- A.
blj][n-i+1]=a[j][i]
- B.
b[j][n-i]=a[j][i]
- C.
b[j][n-i+1]=a[i][j]
- D.
b[j][n-i]=a[i][j]
- ②处应填()。 {{ 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]
- ③处应填() {{ 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]
- ④处应填( ) {{ select(38) }}
- A.
b[n-j+1][i]=a[i][j]
- B.
b[i][n-j]=a[i][j]
- C.
b[i][n-j+1]=a[i][j]
- D.
b[i][n-j]=a[j][i]
- ⑤处应填( ) {{ select(39) }}
- A.
work1()
- B.
work2()
- C.
work3()
- D.
work4()
(2)一个旅行家想驾驶汽车以最少的费用从一个城市到另一个城市(假设出发时油箱是空的)给定两个城市之间的距离 、汽车油箱的容量 (以升为单位)、每升汽能行驶的距离 、出发点每升汽油的价格 沿途加油站数 (N可以为零)、加油站 离出发点的距离 ,每升汽油的价格计算结果四舍五入至数点后两位。如果无法到达目的地,则输出 No Solution
.
输入格式:
第1行,.接下来有 行. 第 行,两个数字,即加油站 离出发点的距离 和每升汽油的价格
输出格式:
所需的最少费用,计算结果四舍五入至小数点后两位。如果无法到达目的地,则输出 No Solution
输入样例:
275.6 11.9 27.4 2.8 2
102.0 2.9
220.0 2.2
输出样例:
26.95
说明/提示: ,其余数字.
#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; i<=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; <=N+1; ++){
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;
}
- `①处应填( )。 {{ select(40) }}
- A.
D[N]= D1
- B.
D[N+1]= D1
- C.
D[1]=D1
- D.
D[N-1]= D1
- ②处应填( ) {{ 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]
- ③处应填()。 {{ select(42) }}
- A.
req = C
- B.
req -= C
- C.
req += C
- D.
req %= C
- ④处应填( )。 {{ 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]
- ⑤处应填( ) {{ select(44) }}
- A.
printf("%.2d\n",ans)
- B.
printf(“%2lf\n",ans)
- C.
cout<<fixed<<setprecision(2)<<ans<<endl
- D.
cout<<fixed<<setprecision(3)<<ans<<endl
初赛模拟卷F
- Status
- Done
- Rule
- OI
- Problem
- 2
- Start at
- 2024-8-20 16:15
- End at
- 2024-8-21 13:45
- Duration
- 2 hour(s)
- Host
- Partic.
- 37