个人博客首页: KJ.JK
专栏介绍: 华为OD机试真题汇总,定期更新华为OD各个时间阶段的机试真题,每日定时更新,本专栏将使用C语言进行更新解答,包含真题,思路分析,代码参考,欢迎大家订阅学习
绘图机器的绘图笔初始位置在原点(0,0)机器启动后按照以下规则来进行绘制直线。
1、尝试沿着横线坐标正向绘制直线直到给定的终点E
2.、期间可以通过指令在纵坐标轴方向进行偏移,offsetY为正数表示正向偏移,为负数表示负向偏移
给定的横坐标终点值E 以及若干条绘制指令,
请计算绘制的直线和横坐标轴以及x=E的直线组成的图形面积。
输入
首行为两个整数 N 和 E
表示有N条指令,机器运行的横坐标终点值E
接下来N行 每行两个整数表示一条绘制指令x offsetY
用例保证横坐标x以递增排序的方式出现
且不会出现相同横坐标x
输出
一个整数表示计算得到的面积 用例保证结果范围在0到4294967295之内
输入
4 10
1 1
2 1
3 1
4 -2
输出
12
输入
2 4
0 1
2 -2
输出
4
1、首先,从输入中读取指令的数量 N 和终点值 E。
2、初始化变量 prevX 和 prevY 为 0,用于记录上一个指令的横坐标和纵向偏移量。
3、初始化变量 area 为 0,用于累加面积的增量。
4、对于每个指令,读取横坐标 x 和纵向偏移量 offsetY。
5、计算当前指令与上一个指令之间的矩形面积增量,并将其累加到 area 上。
6、面积增量 = |x - prevX| * |prevY|
7、使用 abs 函数确保面积增量为正数。
8、更新 prevX 和 prevY 为当前指令的横坐标和纵向偏移量。
9、重复步骤 4-6,直到处理完所有指令。
10、计算最后一个指令的横坐标与终点值 E 之间的矩形面积增量,并将其累加到 area 上。
11、面积增量 = |E - prevX| * |prevY|
使用 abs 函数确保面积增量为正数。
输出最终的面积值 area。
#include
#include
int main() {
int N, E;
scanf("%d %d", &N, &E);
int prevX = 0, prevY = 0;
int area = 0;
for (int i = 0; i < N; i++) {
int x, offsetY;
scanf("%d %d", &x, &offsetY);
area += abs(x - prevX) * abs(prevY);
prevX = x;
prevY += offsetY;
}
area += abs(E - prevX) * abs(prevY);
printf("%d\n", area);
return 0;
}
文章对你有所帮助的话,欢迎给个赞或者 star,你的支持是对作者最大的鼓励,不足之处可以在评论区多多指正,交流学习