目录
- 专栏导读
- 一、题目描述
- 二、输入描述
- 三、输出描述
- 四、解题思路
- 五、Java算法源码
- 六、效果展示
- 1、输入
- 2、输出
- 3、说明
华为OD机试 2023B卷题库疯狂收录中,刷题点这里
专栏导读
本专栏收录于《华为OD机试(JAVA)真题(A卷+B卷)》。
刷的越多,抽中的概率越大,每一题都有详细的答题思路、详细的代码注释、样例测试,发现新题目,随时更新,全天CSDN在线答疑。
一、题目描述
绘图机器的绘图笔初始位置在原点(0,0)。
机器启动后,其绘图笔按下面规则绘制直线:
- 尝试沿着横向坐标轴正向绘制直线,直到给定的终点值E;
- 期间可通过指令在纵坐标方向进行偏移,并同时绘制直线,偏移后按规则1绘制直线;
- 指令的格式为X offsetY。表示在横坐标X沿纵坐标方向偏移offsetY,offsetY为正整数,表示正向偏移,为负数,表示负向偏移。
给定了横坐标终点值E,以及若干条绘制指令。
请计算绘制的直线和横坐标轴,以及X-E的直线组成图形的面积。
二、输入描述
第一行输入两个正整数N、E。
- N表示多少条指令;
- E表示横坐标终点值;
接下来的N行输入两个正整数,表示指令X offsetY。
用例保证横坐标X以递增排序方式出现,且不会出现相同横坐标。
取值范围:
- 0<N<=10000
- 0<X<=E<=20000
- -10000<=offsetY<=10000
三、输出描述
一个整数,表示计算得到的面积。
四、解题思路
- 第一行输入两个正整数N、E;
- 接下来的N行输入两个正整数,表示指令X offsetY;
- X轴坐标 * Y轴坐标计算面积;
- 叠加Y轴偏移量;
- 重置横坐标X;
- 叠加面积(横坐标终点值 - 当前横坐标) * Y轴坐标;
- 输出计算得到的面积。
五、Java算法源码
package com.guor.od;
import java.util.*;
public class OdTest {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int[] arr = Arrays.stream(sc.nextLine().split(" ")).mapToInt(Integer::parseInt).toArray();
// 多少条指令
int N = arr[0];
// 横坐标终点值
int E = arr[1];
int area = 0;
// X轴偏移量
int xSkew = 0;
// Y轴偏移量
int ySkew = 0;
// 接下来的N行输入两个正整数,表示指令X offsetY。
for (int i = 0; i < N; ++i) {
// 指令X offsetY
String[] commands = sc.nextLine().split(" ");
// 横坐标X
int X = Integer.parseInt(commands[0]);
// X轴坐标 * Y轴坐标计算面积
area += Math.abs(ySkew) * (X - xSkew);
// 叠加Y轴偏移量
ySkew += Integer.parseInt(commands[1]);
// 重置横坐标X
xSkew = X;
}
// 叠加面积(横坐标终点值 - 当前横坐标) * Y轴坐标
area += (E - xSkew) * ySkew;
System.out.println(area);
}
}
六、效果展示
1、输入
5 8
1 1
2 2
3 -1
4 -2
5 1
2、输出
9
3、说明
🏆下一篇:华为OD机试 - 荒岛求生 - 栈Stack(Java 2023 B卷 100分)
🏆本文收录于,华为OD机试(JAVA)真题(A卷+B卷)
刷的越多,抽中的概率越大,每一题都有详细的答题思路、详细的代码注释、样例测试,发现新题目,随时更新,全天CSDN在线答疑。