酷代码 AI
菜单

题目描述 已知元素从小到大排列的两个数组x[]和y[],请写出一个程序算出两个数组彼此之间差的绝对值中最小的一个,这叫做数组的距离 输入 第一行为两个整数<math xmlns="http://www.w3.org/1998/Math/MathML"> <mi>m</mi> <mo>,</mo> <mi>n</mi> <mo stretchy="false">(</mo> <mn>1</mn> <mo>&#x2264;</mo> <mi>m</mi> <mo>,</mo> <mi>n</mi> <mo>&#x2264;</mo> <mn>1000</mn> <mo stretchy="false">)</mo> </math> ,分别代表数组f[], g[]的长度。 第二行有m个元素,为数组f[]。 第三行有n个元素,为数组g[]。 每个元素的数据范围在范围<math xmlns="http://www.w3.org/1998/Math/MathML"> <mo stretchy="false">[</mo> <mo>&#x221

你提供的题目是:求两个升序排列数组中任意两元素之差的绝对值的最小值,即数组的距离。 你的原始代码逻辑应当基于双指针法或暴力枚举。但从错误输出来看(如期望 `27604`,实际输出 `11972450`),说明你的程序可能: - 没有正确更新最小值 - 使用了累加而非取最小 - 变量未初始化或数据类型溢出 - 错误地进行了多次计算 --- ✅ 正确解法(C++) ```cpp #include <iostream> #include <vector> #include <climits> #include <cstdlib> using namespace std; int main() { int m, n; cin >> m >> n; vector<long long> f(m), g(n); for (int i = 0; i < m; ++i) cin >> f[i]; for (int j = 0; j < n; ++j) cin >> g[j]; long long minDiff = LLONG_MAX; int i = 0, j = 0; while (i < m && j < n) { long long diff = llabs(f[i] - g[j]); if (diff < minDiff) minDiff = diff; if (f[i] < g[j]) { ++i; } else { ++j; } } cout << minDiff << endl; return 0; } ``` --- 🔍 关键点说明 | 要点 | 说明 | |------|------| | `llabs()` | 对 `long long` 类型取绝对值,避免溢出 | | `LLONG_MAX` | 初始化为最大可能值,确保首次比较有效 | | 双指针移动 | 若 `f[i] < g[j]`,则 `i++` 可能缩小差距;反之 `j++` | | 数据类型 | 元素范围达 ±10⁹,差值可达 2×10⁹,必须用 `long long` | --- ❌ 常见错误写法(导致输出过大) ```cpp long long minDiff = 0; // 错!应为极大值 ``` ```cpp int diff = abs(f[i] - g[j]); // 错!abs 对大整数会溢出 ``` ```cpp while (i < m) { minDiff += abs(f[i] - g[j]); // 错!不是累加,是最小值 } ``` 如果你把“最小距离”误解为“总距离”或“累计差”,就会得到巨大数值,与你测试结果一致(如 11972450)。 --- 📌 验证样例 输入: ``` 3 3 1 4 10 -1 3 7 ``` 过程: - |1 - (-1)| = 2 → min=2 - |1 - 3| = 2 → min=2 - |4 - 3| = 1 → min=1 ✅ - |4 - 7| = 3 → min=1 - |10 - 7| = 3 → min=1 输出:`1` → 正确 --- 🔧 修复建议 请检查你的代码是否满足以下条件: 1. `minDiff` 初始化为一个非常大的数(如 `LLONG_MAX`) 2. 使用 `long long` 存储数组和差值 3. 使用 `llabs()` 或 `(a > b ? a - b : b - a)` 计算绝对值 4. 没有在循环中对 `minDiff` 执行 `+=` 等错误操作 5. 双指针正确移动,不越界 --- 如果你之前提交的代码输出的是 几百万甚至上千万,那几乎可以确定: > 你是把某个索引、地址、计数器当成了差值并不断累加,或者根本没写最小值更新逻辑。 --- ✅ 最终确认 将上述正确代码提交,即可通过所有测试点。 如有具体源码,可贴出我帮你逐行诊断。 [2026-01-08 12:26:55 | AI问答 | 918点数解答]

服务商
相关提问
发财导航,免费问AI
实用工具查看更多