单选题一:
ACID是什么意思?
A、一种数据库管理系统
B、一种数据仓库
C、一种数据处理技术
D、一种数据库事务保证的特性
答案:
D、一种数据库事务保证的特性
单选题二:
OLAP(在线分析处理)主要用于支持以下哪种类型的查询:
A、事务处理查询
B、聚合查询
C、实时查询
D、文本查询
答案:
B、聚合查询
单选题三:
下列哪种技术可以用于大数据处理?
A、MapReduce
B、SQL
C、NoSQL
D、手写代码
答案:
A、MapReduce
单选题四:
大数据的“3V”指的是哪三个方面?
A、速度、体积、价值
B、速度、体积、多样性
C、速度、价值、多样性
D、体积、价值、多样性
答案:
B、速度、体积、多样性
编程题一:
给你二维平面上两个 由直线构成且边与坐标轴平行/垂直 的矩形,请你计算并返回两个矩形覆盖的总面积。 每个矩形由其 左下 顶点和 右上 顶点坐标表示:
第一个矩形由其左下顶点 (ax1, ay1) 和右上顶点 (ax2, ay2) 定义。 第二个矩形由其左下顶点 (bx1, by1) 和右上顶点 (bx2, by2) 定义。
参数限制: -10e4 <= ax1, ay1, ax2, ay2, bx1, by1, bx2, by2 <= 10e4
答案:
def computeArea(ax1, ay1, ax2, ay2, bx1, by1, bx2, by2):
area1 = (ax2 - ax1) * (ay2 - ay1)
area2 = (bx2 - bx1) * (by2 - by1)
overlap_width = max(0, min(ax2, bx2) - max(ax1, bx1))
overlap_height = max(0, min(ay2, by2) - max(ay1, by1))
overlap_area = overlap_width * overlap_height
total_area = area1 + area2 - overlap_area
return total_area
# 输入示例
ax1 = int(input())
ay1 = int(input())
ax2 = int(input())
ay2 = int(input())
bx1 = int(input())
by1 = int(input())
bx2 = int(input())
by2 = int(input())
# 计算覆盖面积
result = computeArea(ax1, ay1, ax2, ay2, bx1, by1, bx2, by2)
# 输出结果
print(result)
解析:
解题思路:
两个矩形的总面积等于两个矩形的面积之和减去它们重叠的部分的面积。
矩形的面积可以通过计算两个对角顶点的坐标差再相乘得到。
两个矩形的重叠部分的面积可以通过计算重叠部分的宽度和高度再相乘得到。
重叠部分的宽度为两个矩形在 x 轴上的投影的交集,即两个矩形在 x 轴上的最大左边界与最小右边界的差值,如果没有重叠则宽度为 0。
重叠部分的高度为两个矩形在 y 轴上的投影的交集,即两个矩形在 y 轴上的最大下边界与最小上边界的差值,如果没有重叠则高度为 0。
具体实现步骤如下:
1. 计算第一个矩形的面积,使用 (ax2 - ax1) * (ay2 - ay1)。
2. 计算第二个矩形的面积,使用 (bx2 - bx1) * (by2 - by1)。
3. 计算重叠部分的宽度,使用 max(0, min(ax2, bx2) - max(ax1, bx1))。
4. 计算重叠部分的高度,使用 max(0, min(ay2, by2) - max(ay1, by1))。
5. 计算重叠部分的面积,使用重叠部分的宽度乘以高度。
6. 计算总面积,使用第一个矩形的面积加上第二个矩形的面积减去重叠部分的面积。
7. 返回总面积作为结果。
编程题二:
小光买了一个可编程机器猫,机器猫初始位置在原点(0, 0)。 小伙伴事先给机器猫输入一串指令command,机器猫就会 无限循环这条指令的步骤进行移动。指令有两种:
U: 向y轴正方向移动一格 R: 向x轴正方向移动一格。 D: 向y轴负方向移动一格 L: 向x轴负方向移动一格。 不幸的是,在 xy 平面上还有一些遮挡物,他们的坐标用 barriers 表示。机器猫一旦碰到遮挡物就会被损毁。
限制: 2 <= command的长度 <= 1000 command由 U,R,D,L构成(个数不限制) 0 <= x <= 1e9 0 <= y <= 1e9 0 <= barriers 的长度 <= 1000 barriers[i]不为原点或者终点
答案:
def isCatReachable(command, barriers, x, y):
cat_x = 0
cat_y = 0
barrier_set = set((bx, by) for bx, by in barriers)
for move in command:
if move == 'U':
cat_y += 1
elif move == 'R':
cat_x += 1
elif move == 'D':
cat_y -= 1
elif move == 'L':
cat_x -= 1
if (cat_x, cat_y) in barrier_set:
return False
if cat_x == x and cat_y == y:
return True
return False
# 输入示例
command = input("请输入指令command: ")
barriers = []
n = int(input("请输入遮挡物个数n: "))
for _ in range(n):
barrier = list(map(int, input("请输入遮挡物坐标(x, y): ").split()))
barriers.append(barrier)
x, y = map(int, input("请输入终点坐标(x, y): ").split())
# 判断机器猫是否能到达终点
result = isCatReachable(command, barriers, x, y)
# 输出结果
print(result)
解析:
解题思路:
我们可以模拟机器猫的移动过程,同时检查是否与遮挡物发生碰撞或到达终点。
1. 初始化机器猫的当前位置为(0, 0)。
2. 初始化一个集合用于存储遮挡物的坐标。
3. 在遮挡物坐标数组中,将遮挡物的坐标加入集合中。
4. 从左到右遍历指令command,根据指令更新机器猫的位置。
- 如果指令是'U',将机器猫的y坐标增加1。
- 如果指令是'R',将机器猫的x坐标增加1。
- 如果指令是'D',将机器猫的y坐标减少1。
- 如果指令是'L',将机器猫的x坐标减少1。
- 检查机器猫的位置是否与遮挡物集合中的坐标重合,如果重合则返回false。
- 检查机器猫的位置是否与终点坐标重合,如果重合则返回true。
5. 如果遍历完所有指令后,机器猫的位置不等于终点坐标,则返回false。