#C0002. 2023年图灵编程CSP-J初赛模拟卷2
2023年图灵编程CSP-J初赛模拟卷2
2023年图灵编程CSP-J初赛模拟卷2
一、单项选择题(共15题,每题2分,共计30分)
1.以下哪个不是个人计算机的硬件组成部分( )。{{ select(1) }}
- 主板
- 总线
- 虚拟内存
- 硬盘
2.已知一棵二叉树前序遍历为ABCDEFGI,后序遍历为CEDBIGFA,则其中序遍历可能为( )。{{ select(2) }}
- ABCDEFGI
- CBEDAFIG
- CBDEAGFI
- CBEDAIFG
3.小博手中有8颗子弹,编号为1、2、3、4、5、6、7、8,从编号1开始按序嵌入弹夹中,以下有哪个不是正常打出的子弹的次序( )。{{ select(3) }}
- 12345678
- 87654321
- 32164587
- 32154876
4.在2424点阵的字库中,汉字“一”与“编“的字模占用字节数分别是( )。(提示:一个点可以点亮或熄灭,有两种状态,因此可以用一个比特位来代替){{ select(4) }}
- 72、72
- 32、32
- 32、72
- 72、32
5.设循环队列中数组的下标范围是n,其中头尾指针分别是和,则其元素个数是( )。
{{ select(5) }}
6.下面哪个不是操作系统的名字( )。{{ select(6) }}
- WindowsXP
- Linux
- Arch/Info
- 0S/2
7.用欧几里得算法求最大公约数的方法是( )。
int gcd(int a,int b){
if(b==0) return a;
return gcd(_____);
}
{{ select(7) }}
- a,a%b
- b,a%b
- a%b,a
- b,a/b
8.以下逻辑表达式的值恒为真的是( )。{{ select(8) }}
9.如果树根算第1层,那么一棵n层的二叉树最多有( )个结点。{{ select(9) }}
10.前缀表达式 +3*2+5 12
的值是( )。{{ select(10) }}
- 23
- 25
- 37
- 65
11.十进制算术表达式:的运算结果,用二进制表示为( )。{{ select(11) }}
- 10111100101
- 11111100101
- 11110100101
- 11111100111
12.若某数z的真值为-0.1010,在计算机中该数表示为1.0110,则该数所用的编码方法是( )。{{ select(12) }}
- 原
- 补
- 反
- 移
13.从数字1,2,3,4,5中任取两个不同的数字,构成一个两位数,则这个数字大于40的概率是( ){{ select(13) }}
14.用数字0,1,2,3,4,5组成没有重复的五位数,其中比40000大的偶数共有( )。{{ select(14) }}
- 144个
- 120个
- 96个
- 72个
15.三个盒子中有一个盒子放着珍珠,每个盒子上各写着一句话,但只有一句真话,其余都是谎话。第一个盒子是红色的,上面写着"珍珠在这里";第二个盒子是蓝色的,上面写着"珍珠不在红盒子里";第三个盒子是黄色的,上面写着"珍珠不在这里"请问,珍珠到底在哪个盒子里?( )。{{ select(15) }}
- 第一个
- 第二个
- 第三个
- 都不在
二、阅读程序(每题3分,共36分)
(1) 规定:输入的n为偶数。
1#include <bits/stdc++.h>
2using namespace std;
3const int mm = 1007;
4int map[mm][mm];
5int n;
6int main(){
7 cin >> n;
8 n--;
9 memset(map,0,sizeof(map));
10 for(int i = 0;i<n;i++)
11 {
12 for(int j = 0;j<n;j++)
13 {
14 map[i][j] = (i+j)%n+1;
15 }
16 }
17 for(int i = 0;i<n;i++)
18 {
19 map[i][n] = map[n][i] = map[i][i];
20 map[i][i] = 0;
21 }
22 for(int i = 0;i<=n;i++)
23 {
24 for(int j = 0;j<=n;j++)
25 {
26 cout << map[i][j]<<" ";
27 }
28 cout << endl;
29 }
30 return 0;
31}
判断题
16.若n = 6,map[3][6]
的值是4。( ){{ select(16) }}
- 正确
- 错误
17.当程序执行完第16行时,此时map数组形成一个矩阵(值不为0的部分),且该矩阵关于从左上到右下的对角线对称。( ){{ select(17) }}
- 正确
- 错误
18.输出的值形成一个矩阵,且该矩阵关于从左上到右下的对角线对称。( ){{ select(18) }}
- 正确
- 错误
19.值为x的位置有(,),(,),...,则任意的两个位置的i和j都不相同.( ){{ select(19) }}
- 正确
- 错误
选择题
20.当n = 8时,输出的第4行的值的和是( ).{{ select(20) }}
- 28
- 36
- 8
- 7
21.输入n时,输出的从右上到左下对角线的值的和是( ). {{ select(21) }}
- 0
- n
- n(n-1)/2
- (n+1)n/2
(2) 规定输入的n为int范围内的正整数。
1#include <bits/stdc++.h>
2using namespace std;
3int n,m,ans,p[101],e[101];
4int pow1(int x,int w)
5{
6 int res = 1;
7 for(int i = 1;i<=w;i++)
8 {
9 res = res*x;
10 }
11 return res;
12}
13int main(){
14 cin >> n;
15 int i =2;
16 while(n!=1)
17 {
18 if(n%i == 0)
19 {
20 m++;
21 p[m] = i;
22 e[m] = 0;
23 while(n%i ==0)
24 {
25 e[m]++;
26 n = n/i;
27 }
28 }
29 i++;
30 }
31 ans = 1;
32 for(i = 1;i<=m;i++)
33 {
34 ans = ans*(p[i]-1)*pow1(p[i],e[i]-1);
35 }
36 cout << ans << endl;
37 return 0;
38}
判断题
22.输出的值一定比输入的值小。{{ select(22) }}
- 正确
- 错误
23.若输入的n的值等于(a,b均为大于等于2的正整数),则第16行循环执行完毕后,m的值为1,且p[1]的值为a。( ){{ select(23) }}
- 正确
- 错误
24.若输入的n为素数,输出的结果有可能是素数。( ){{ select(24) }}
- 正确
- 错误
25.若输入的n为素数,程序执行完第30行时,i的值等于一开始输入的n。( ){{ select(25) }}
- 正确
- 错误
选择题
26.若输入19800,则输出( )。{{ select(26) }}
- 3600
- 4800
- 19800
- 158400
27.若输出2400,则输入的n可能为( )。{{ select(27) }}
- 3200
- 6400
- 7200
- 9000
三、完善程序(28-31题每题4分,32-37题每题3分,共34分)
(1)机场分为国内区和国际区,国内航班飞机只能停靠在国内区,国际航班飞机只能停靠在国际区。一部分廊桥属于国内区,其余的廊桥属于国际区。 市新建了一座机场,一共有个廊桥。该机场决定,廊桥的使用遵循“先到先得”的原则,即每架飞机抵达后,如果相应的区(国内/国际)还有空闲的廊桥,就停靠在廊桥,否则停靠在远机位(假设远机位的数量充足)。该机场只有一条跑道,因此不存在两架飞机同时抵达的情况。现给定未来一段时间飞机的抵达、离开时刻,请你负责将个廊桥分配给国内区和国际区,使停靠廊桥的飞机数量最多。输入的第一行,包含三个正整数分别表示廊桥的个数、国内航班飞机的数量、国际航班飞机的数量。接下来行,是国内航班的信息,第i行包含两个正整数分别表示一架国内航班飞机的抵达、离开时刻。接下来行,是国际航班的信息,第i行包含两个正整数,分别表示一架国际航班飞机的抵达、离开时刻。每行的多个整数由空格分隔。输出一个正整数,表示能够停靠廊桥的飞机数量的最大值
#include<bits/stdc++.h>
using namespace std;
typedef long long ll ;
const int maxn = 1e6 + 7 ;
inline ll read(){
ll x = 0 , f = 1 ;
char c = getchar() ;
while(c > '9' || c < '0'){
if(c == '-')
f = -1 ;
c = getchar() ;
}
while(c >= '0' && c <= '9'){
x = x * 10 + c - '0' ;
c = getchar() ;
}
return x * f ;
}
ll f[3][maxn] ;
ll u , v , n , m1 , m2 ;
set<pair<ll , ll >> a ;
set<pair<ll , ll >> b ;
void init(set< pair < ll , ll > > &a , ll *t ){
for(int i = 1 ; i <= n ; i ++){
vector<pair<ll , ll>> ans ;
t[i] = t[i - 1] + t[i] ;
for(auto it = a.begin() ; it != a.end() ; it = a.upper_bound({____(3)___, 0})){
++ t[i] ;
___________(4)___________
}
for(auto it : ans){
a.erase(it) ;
}
}
}
int main(){
n = read() ;
m1 = read() ;
m2 = read() ;
for(int i = 1 ; i <= m1 ; i ++){
u = read() ;
v = read() ;
___________(1)___________
}
for(int i = 1 ; i <= m2 ; i ++){
u = read();
v = read() ;
b.insert({u , v}) ;
}
init(a , f[1]) ;
init(b , f[2]) ;
long long sum = -0x3f3f3f ;
for(int i = 0 ; i <= n ; i ++){
sum = max(sum ,___________(2)___________) ;
}
printf("%lld\n" , sum) ;
return 0 ;
}
28.(1)处应该填写:{{ select(28) }}
29.(2) 处应该填写:{{ select(29) }}
30.(3) 处应该填写:{{ select(30) }}
31.(4) 处应该填写:{{ select(31) }}
(2)出租车
题目描述
城市可看作是一个矩形网格,有M个出租车任务,告诉你每个请求的出发时间s,起点坐标(a,b),终点坐标(c,d)。出租车从到需要的时间为。若一辆出租车完成某项任务后,能及时赶到另一个任务出发点,则继续完成该任务。注意有些任务可能半夜才能结束。请求出完成所有请求所需要的最少出租车辆数。
输入描述
第一行为一整数N,表示有几组数据,每一组数据第一行有一个整数 M(0<M<500),表示出租车任务。下面M行中,每行为起始时间,格式为hh:mm ( 00:00-23:59),两个整数a,b为起始地址坐标,c,d为目标地址。所有坐标在(0~200)之间。
输出描述
每组数据输出一行,每行只有一个整数,表示最少出租车数。
#include<bits/stdc++.h>
using namespace std;
int T , n;
int vis[501];
int Time[501][501];
struct Point{
int s_time , f_time , x1 , y1 , x2 , y2;
friend bool operator < (Point a , Point b){
return ___________________(1)_________________
}
}p[501];
int get_Time(){
char time[10];
cin >> time;
return ___________________(2)______________________
}
int get_Time(int x1 , int y1 , int x2 , int y2){
return abs(x1 - x2) + abs(y1 - y2);
}
int main(){
ios :: sync_with_stdio(0);
cin.tie(0);
for(cin >> T ; T ; T --){
cin >> n;
for(int i = 1;i <= n;i ++){
vis[i] = 0 , p[i].s_time = get_Time();
_________________(3)_________________
p[i].f_time = get_Time(p[i].x1 , p[i].y1 , p[i].x2 , p[i].y2);
}
sort(p + 1 , p + 1 + n);
for(int i = 1;i <= n;i ++)
for(int j = i + 1;j <= n;j ++)
Time[i][j] = ________________(4)_______________
int cnt = 0 , ans = 0;
for(int Now_Time = 0 , Now_ID; cnt < n ; ans ++ , Now_Time = 0)
for(int i = 1;i <= n;i ++)
if(_________(5)_________)
vis[i] = 1 , cnt ++ , Now_Time = __(6)__ , Now_ID = i; //更新当前时间
cout << ans << endl;
}
return 0;
}
32.补全(1)中的代码 {{ select(32) }}
- a.f_time < b.f_time ? 1 : a.f_time == b. f_time && a.s_time < b.s_time ? 1 : 0;
- a.f_time < b.f_time;
- abs(a.x1 - a.x2) + abs(a.y1 - a.y2) < abs(b.x1 - b.x2) + abs(b.y1 - b.y2);
- a.s_time + a.f_time < b.s_time + b.f_time
33.补全(2)中的代码 {{ select(33) }}
- ((time[0] - '0') * 10 + time[1] - '0') * 60 + (time[3] - '0') * 10 + time[4] -'0';
- (time[0] + time[1] - '0') * 60 + (time[3] - '0') * 10 + time[4] -'0';
- ((time[0] - '0') * 10 + time[1] - '0') * 60 + (time[2] - '0') * 10 + time[3] -'0';
- ((time[0] - '0') * 10 + time[1] - '0')+ (time[3] - '0') * 10 + time[4] -'0' * 60;
34.补全(3)中的代码 {{ select(34) }}
- cin >> p[i].s_time >> p[i].x1 >> p[i].y1 >> p[i].x2 >> p[i].y2;
- cin >> p[i].x1 >> p[i].y1 >> p[i].x2 >> p[i].y2;
- cin >> p[i].f_time >> p[i].x1 >> p[i].y1 >> p[i].x2 >> p[i].y2;
- cin >> p[i];
35.补全(4)中的代码 {{ select(35) }}
- get_Time(p[i].x1 , p[i].y1 , p[j].x2 , p[j].y2);
- get_Time(p[i].x1 , p[i].y1 , p[i].x2 , p[i].y2);
- get_Time( );
- get_Time(p[i].x2 , p[i].y2 , p[j].x1 , p[j].y1);
36.补全(5)中的代码{{ select(36) }}
- ((Now_Time + Time[Now_ID][i] > p[i].s_time) || Now_Time == 0) && !vis[i]
- ((Now_Time + Time[Now_ID][i] < p[i].s_time)) && !vis[i]
- ((Now_Time + Time[Now_ID][i] < p[i].s_time) || Now_Time == 0) && !vis[i]
- ((Now_Time + Time[Now_ID][i] < p[i].s_time) || Now_Time == 0) && vis[i]
37.补全(6)中的代码{{ select(37) }}
- p[i].f_time
- Now_Time + p[i].s_time
- p[i].s_time + p[i].f_time
- Now_Time + p[i].f_time
相关
在以下作业中: