1. PAT乙级1063题解:计算向量模长的最大值
这道题目来自PAT乙级考试的1063题,主要考察基础数学运算和简单算法实现能力。题目要求我们计算给定多个二维向量的模长,并找出其中的最大值。作为乙级题目中较为简单的一类,它非常适合用来巩固基础编程能力和数学应用能力。
在实际编程竞赛和算法面试中,这类基础题目经常作为热身题出现。虽然简单,但其中包含的数学知识和编程技巧却非常实用。通过这道题,我们可以学习到如何高效计算向量模长、如何进行浮点数比较以及如何控制输出格式等实用技能。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 题目分析与解题思路
2.1 题目理解与建模
题目给出n个二维向量(x,y),要求我们计算每个向量的模长,然后找出所有模长中的最大值。向量模长的计算公式为:
code复制模长 = √(x² + y²)
这实际上就是计算二维平面上点到原点的距离。我们需要遍历所有输入向量,计算它们的模长并保持更新最大值。
2.2 算法选择与复杂度分析
由于题目只需要找出最大值,我们可以采用线性扫描的算法:
- 初始化最大模长变量为0(或一个很小的负数)
- 对于每个输入向量:
- 计算当前向量模长
- 与当前最大值比较,更新最大值
- 输出最终的最大模长
这个算法的时间复杂度是O(n),空间复杂度是O(1),是最优解。对于PAT乙级考试的数据规模(n≤10000),这个复杂度完全足够。
3. 代码实现与细节解析
3.1 完整代码展示
cpp复制#include<bits/stdc++.h>
using namespace std;
int main() {
int n;
cin >> n;
int num1, num2;
double max1 = -0.1;
for(int i = 0; i < n; i ++) {
cin >> num1 >> num2;
double sum = (double) sqrt(num1 * num1 + num2 * num2);
max1 = max(max1, sum);
}
printf("%.2f", max1);
return 0;
}
