华为 OD 机试 2025B 卷 – 报文响应时间 (C++、Python、Java、JS、Go)

题目背景

在现代分布式系统中,性能优化至关重要,尤其是针对响应时间的优化。你需要设计一个程序来模拟报文的响应时间计算,帮助企业优化其网络请求响应能力。

给定一个请求,程序需要计算其报文的响应时间(以毫秒为单位),并输出给定请求的响应时间。报文的响应时间可能会受到以下因素的影响:

  • 传输时间
  • 计算时间
  • 网络延迟等

要求在不同的编程语言中实现计算响应时间的功能。


输入

输入是一个整数 N,表示报文的响应时间测量次数。接下来,输入 N 行,每行包含两个整数:

  • T: 传输时间(毫秒)
  • C: 计算时间(毫秒)

输出要求:

  • 对于每个输入,计算该报文的响应时间,并输出。

输出

对于每个报文请求,输出一个整数,表示该报文的总响应时间(以毫秒为单位)。


示例输入

3
10 20
5 30
15 25

示例输出

30
35
40

C++ 实现

#include <iostream>
using namespace std;

int main() {
    int N;
    cin >> N;

    while (N--) {
        int T, C;
        cin >> T >> C;
        cout << T + C << endl;
    }

    return 0;
}

解释:

  1. 输入:首先读取整数 N,表示有多少次请求。接下来,逐行读取每个请求的传输时间和计算时间。
  2. 输出:每个请求的响应时间就是传输时间和计算时间之和。

Python 实现

def main():
    N = int(input())  # 读取请求次数
    for _ in range(N):
        T, C = map(int, input().split())  # 读取传输时间和计算时间
        print(T + C)  # 输出响应时间

if __name__ == "__main__":
    main()

解释:

  • 输入:通过 input() 获取输入数据,使用 map() 处理每行输入的两个整数(传输时间和计算时间)。
  • 输出:直接输出计算结果 T + C

Java 实现

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int N = scanner.nextInt();  // 读取请求次数

        while (N-- > 0) {
            int T = scanner.nextInt();
            int C = scanner.nextInt();
            System.out.println(T + C);  // 输出响应时间
        }
    }
}

解释:

  • 输入:通过 Scanner 类读取输入数据,首先读取请求次数 N,然后逐行读取每个报文的传输时间和计算时间。
  • 输出:使用 System.out.println() 输出响应时间。

JavaScript 实现

function main() {
    let N = parseInt(prompt());  // 读取请求次数

    for (let i = 0; i < N; i++) {
        let [T, C] = prompt().split(' ').map(Number);  // 读取传输时间和计算时间
        console.log(T + C);  // 输出响应时间
    }
}

main();

解释:

  • 输入:通过 prompt() 获取用户输入,使用 split() 将输入字符串分隔并转换为整数。
  • 输出:直接使用 console.log() 输出响应时间。

Go 实现

package main

import (
    "fmt"
)

func main() {
    var N int
    fmt.Scan(&N)  // 读取请求次数

    for i := 0; i < N; i++ {
        var T, C int
        fmt.Scan(&T, &C)  // 读取传输时间和计算时间
        fmt.Println(T + C)  // 输出响应时间
    }
}

解释:

  • 输入:通过 fmt.Scan() 获取输入数据,首先读取请求次数 N,然后逐行读取每个报文的传输时间和计算时间。
  • 输出:使用 fmt.Println() 输出响应时间。

时间复杂度分析

  • 对于每种实现,算法的时间复杂度为 O(N),其中 N 是请求次数。
  • 每个请求需要读取两个整数并进行加法计算,时间复杂度是常数级的,因此总时间复杂度是 O(N)

总结

无论是在 C++、Python、Java、JavaScript 还是 Go 中,这道题目的核心思路是读取输入数据并计算每个报文的响应时间。每种语言的实现方式有所不同,但解决思路是一致的:读取输入、进行计算、输出结果。

通过这道题目,你可以熟悉不同编程语言中的输入输出处理,并能够优化自己的算法设计。