OD統一考試(C卷)
分值: 100分
題解: Java / Python / C++
題目描述
繪圖機器的繪圖筆初始位置在原點(0, 0),機器啟動后其繪圖筆按下面規則繪制直線:
1)嘗試沿著橫向坐標軸正向繪制直線,直到給定的終點值E。
2)期間可通過指令在縱坐標軸方向進行偏移,并同時繪制直線,偏移后按規則1 繪制直線;指令的格式為X offsetY,表示在橫坐標X 沿縱坐標方向偏移,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
題解
這是一個簡單的幾何題,通過讀取指令和橫坐標值,計算出圖形的總面積。以下是對該問題的解法總結:
- 解題思路: 按要求讀取每個指令,根據指令更新繪圖筆位置并計算相應的面積。
- 代碼描述:
- 初始化圖形總面積
totalArea
和繪圖筆位置(x, y)
。- 讀取每個指令,計算當前邊和前一條邊組成的面積,并更新繪圖筆位置。
- 最后計算最后一條邊組成的面積。
- 輸出結果。
Java
import java.util.Scanner;/*** @author code5bug*/public class Main {public static void main(String[] args) {Scanner in = new Scanner(System.in);// 讀取輸入的 N 和 Eint N = in.nextInt(), E = in.nextInt();// 初始化圖形總面積long totalArea = 0;// 繪圖筆位置 (x, y)int x = 0, y = 0;// 讀取命令并存儲在數組中for (int i = 0; i < N; i++) {int curX = in.nextInt(), offsetY = in.nextInt();// 累計當前邊和前一條邊組成的面積totalArea += 1L * (curX - x) * Math.abs(y);// 更新繪圖筆位置x = curX;y += offsetY;}// 計算最后一條邊組成的面積totalArea += (E - x) * Math.abs(y);// 輸出結果System.out.println(totalArea);}
}
Python
N, E = map(int, input().split())# 圖形總面積, 繪圖筆位置 (x, y)
total_area, x, y = 0, 0, 0for _ in range(N):cur_x, offset_y = map(int, input().splitt())# 累計當前邊和前一條邊組成的面積total_area += (cur_x - x) * abs(y)# 更新繪圖筆位置x, y = cur_x, y + offset_y# 最后一條邊的面積
total_area += (E - x) * abs(y)print(total_area)
C++
#include <iostream>using namespace std;int main() {// 讀取輸入的 N 和 Eint N, E;cin >> N >> E;// 初始化圖形總面積long long totalArea = 0;// 繪圖筆位置 (x, y)int x = 0, y = 0;// 讀取命令并存儲在數組中for (int i = 0; i < N; i++) {int curX, offsetY;cin >> curX >> offsetY;// 累計當前邊和前一條邊組成的面積totalArea += 1LL * (curX - x) * abs(y);// 更新繪圖筆位置x = curX;y += offsetY;}// 計算最后一條邊組成的面積totalArea += 1LL * (E - x) * abs(y);// 輸出結果cout << totalArea << endl;return 0;
}
????華為OD機試面試交流群(每日真題分享): 加V時備注“華為od加群”
🙏整理題解不易, 如果有幫助到您,請給點個贊 ???? 和收藏 ?,讓更多的人看到。🙏🙏🙏