【华为OD机试真题 C语言】9、绘图机器 | 机试真题+思路参考+代码解析

文章目录

    • 一、题目
      • 题目描述
      • 输入输出
      • 样例1
      • 样例2
    • 二、思路参考
    • 三、代码参考
  • 作者:KJ.JK


个人博客首页: 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之内


样例1

输入
4 10

1 1

2 1

3 1

4 -2


输出
12


样例2

输入
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;
}


作者:KJ.JK

文章对你有所帮助的话,欢迎给个赞或者 star,你的支持是对作者最大的鼓励,不足之处可以在评论区多多指正,交流学习

你可能感兴趣的:(华为OD机试真题(C语言),c语言,java,算法,华为OD机试真题,绘图机器)