[关闭]
@yexiaoqi 2022-06-02T09:11:43.000000Z 字数 765 阅读 354

64. 求机器绘图面积

刷题 华为机试


题目:绘图机器的绘图笔初始位置在原点(0,0),机器启动后按照以下规则来进行绘制直线
1. 尝试沿着横线坐标正向绘制直线直到给定的终点E
2. 期间可以通过指令在纵坐标轴方向进行偏移,offsetY为正数表示正向偏移,为负数表示负向偏移。给定的横坐标终点值E 以及若干条绘制指令,请计算绘制的直线和横坐标轴以及x=E的直线组成的图形面积。

输入描述:
首行为两个整数 N 和 E,表示有N条指令,机器运行的横坐标终点值 E。接下来N行每行两个整数表示一条绘制指令 x offsetY。用例保证横坐标 x 以递增排序的方式出现,且不会出现相同横坐标 x。
取值范围:0 < N <= 10000, 0 < X <= E <= 20000, -10000 <= offsetY <= 10000
输出描述:
一个整数表示计算得到的面积 用例保证结果范围在0到4294967295之内

示例1:

输入:4 10
     1 1
     2 1
     3 1
     4 -2
输出:12

示例2:

输入:2 4
     0 1
     2 -2
输出:4

刚开始没明白,后来看到网友的图,计算的就是圈起来的范围
示例1的图

  1. public class Main {
  2. public static void main(String[] args){
  3. Scanner sc = new Scanner(System.in);
  4. int N = sc.nextInt();
  5. int E = sc.nextInt();
  6. int curX=0,curY=0,area=0;
  7. for(int i=0; i<N; i++){
  8. int x = sc.nextInt();
  9. int y = sc.nextInt();
  10. area += (x-curX)*Math.abs(curY);
  11. curX = x;
  12. curY += y;
  13. }
  14. //计算最后一个矩形的面积
  15. if(curX < E){
  16. area += (E-curX)*Math.abs(curY);
  17. }
  18. System.out.println(area);
  19. }
  20. }
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注