爱吃菠萝包 发表于 2025-3-19 19:14:06

新手小白,答案看不懂有几个问题想问一下

import random
nums = [ ]
for i in range(10000):#这里为啥是10000,有什么意义吗?#
    x = random.randint(1, 65535)   
    nums.append(x)

target = int(input("请录入目标整数:"))

isFind = False
n = len(nums)
for i in range(n):
   for j in range(i+1, n):#这里为啥是i+1到n嘞?#         
          if nums + nums == target:   
             print()
      isFind = True

if isFind == False:   
   print("找不到!")

FishC 发表于 2025-3-19 19:14:18

你的代码有几个问题,我会一一解答并修正。

### **关于 `range(10000)`**
`range(10000)` 表示循环 10000 次,每次生成一个随机数并添加到 `nums` 列表中。这里的 10000 只是一个示例值,表示列表中会有 10000 个随机数。你可以修改这个值来调整列表的大小。

### **关于 `i+1` 到 `n`**
在双重循环中:
for i in range(n):
    for j in range(i+1, n):
- `i` 代表当前遍历的第一个数的索引。
- `j` 从 `i+1` 开始,表示第二个数的索引,确保不会重复计算同一对数字,也不会让自己和自己相加。

### **代码中的错误**
1. `nums = ` 这里 `nums` 变量未正确初始化,应该是 `nums = []`。
2. `if nums + nums == target:` 这行代码是错误的,应该是 `if nums + nums == target:`。
3. `print()` 语句没有内容,应该输出找到的两个数。
4. `isFind = True` 需要正确缩进,否则会导致逻辑错误。

### **修正后的代码**
import random

nums = []# 初始化列表
for i in range(10000):
    x = random.randint(1, 65535)   
    nums.append(x)

target = int(input("请录入目标整数:"))

isFind = False
n = len(nums)

for i in range(n):
    for j in range(i+1, n):
      if nums + nums == target:   
            print(f"找到两个数:{nums} + {nums} = {target}")
            isFind = True
            break# 找到后可以跳出内层循环
    if isFind:
      break# 也跳出外层循环

if not isFind:   
    print("找不到!")
### **优化建议**
- 目前的算法是 **O(n^2)**,当 `n` 很大时,效率较低。可以使用 **哈希表(字典)** 来优化到 **O(n)**:
nums_set = set(nums)# 使用集合加速查找
for num in nums:
    complement = target - num
    if complement in nums_set:
      print(f"找到两个数:{num} + {complement} = {target}")
      isFind = True
      break

if not isFind:
    print("找不到!")
这样可以大幅提高查找速度!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

jackz007 发表于 2025-3-19 20:32:50

for i in range(10000):#这里为啥是10000,有什么意义吗?#
         循环 10000 次
for i in range(n):
   for j in range(i+1, n):#这里为啥是i+1到n嘞?#
         j 从 i + 1 起步开始循环,目的是为了避免出现 j == i 。
页: [1]
查看完整版本: 新手小白,答案看不懂有几个问题想问一下