首页 >> 严选问答 >

问求杭电ACM1029代码

2026-01-05 19:52:54

答

【求杭电ACM1029代码】杭电ACM1029是一道经典的编程题,题目要求根据输入的数字序列,判断其中是否存在一个数是另一个数的两倍。该题目的核心在于如何高效地查找每个数的两倍是否存在于数组中。

一、题目大意

给定一个整数数组,判断是否存在两个不同的元素 a 和 b,使得 a = 2 b。若存在,输出“YES”,否则输出“NO”。

二、解题思路

1. 遍历数组中的每一个元素。

2. 对于每个元素 x,检查是否存在 2x 或 x/2(当 x 是偶数时)。

3. 使用集合(Set)或哈希表来快速查找是否存在目标值。

4. 注意避免重复判断同一个元素,例如 x 和 2x 的情况。

三、算法实现

- 时间复杂度:O(n)

- 空间复杂度:O(n)

四、代码示例(C++)

```cpp

include

include

using namespace std;

int main() {

int n;

while (cin >> n) {

set s;

bool flag = false;

for (int i = 0; i < n; ++i) {

int x;

cin >> x;

if (s.find(x 2) != s.end() (x % 2 == 0 && s.find(x / 2) != s.end())) {

flag = true;

}

s.insert(x);

}

cout << (flag ? "YES" : "NO") << endl;

}

return 0;

}

```

五、测试样例

输入 输出
5
1 2 3 4 5
YES
3
1 3 5
NO
4
2 4 8 16
YES
2
1 2
YES

六、总结

杭电ACM1029题目虽然看似简单,但需要注意边界条件和数据类型。通过使用集合进行快速查找,可以有效提升程序效率。在实际编程过程中,还需注意输入格式和数据范围,确保程序的健壮性与正确性。

附:代码运行说明

- 本代码适用于C++环境。

- 支持多组测试用例输入。

- 每组输入以一个整数n开头,表示数组长度。

  免责声明:本答案或内容为用户上传,不代表本网观点。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。 如遇侵权请及时联系本站删除。

 
分享:
最新文章