鱼C论坛

 找回密码
 立即注册
查看: 217|回复: 2

[已解决]新手小白,答案看不懂有几个问题想问一下

[复制链接]
发表于 2025-3-19 19:14:06 From FishC Mobile | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
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[i] + nums[j] == target:     
             print([i, j])
      isFind = True

if isFind == False:   
   print("找不到!")
最佳答案
2025-3-19 20:32:50
  1. for i in range(10000):  #这里为啥是10000,有什么意义吗?#
复制代码

           循环 10000 次
  1. for i in range(n):  
  2.      for j in range(i+1, n):  #这里为啥是i+1到n嘞?#
复制代码

           j 从 i + 1 起步开始循环,目的是为了避免出现 j == i 。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2025-3-19 19:14:18 | 显示全部楼层
你的代码有几个问题,我会一一解答并修正。  

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

### **关于 `i+1` 到 `n`**
在双重循环中:
  1. for i in range(n):  
  2.     for j in range(i+1, n):
复制代码

- `i` 代表当前遍历的第一个数的索引。
- `j` 从 `i+1` 开始,表示第二个数的索引,确保不会重复计算同一对数字,也不会让自己和自己相加。

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

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

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

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

  7. isFind = False
  8. n = len(nums)

  9. for i in range(n):  
  10.     for j in range(i+1, n):  
  11.         if nums[i] + nums[j] == target:     
  12.             print(f"找到两个数:{nums[i]} + {nums[j]} = {target}")
  13.             isFind = True  
  14.             break  # 找到后可以跳出内层循环
  15.     if isFind:
  16.         break  # 也跳出外层循环

  17. if not isFind:   
  18.     print("找不到!")
复制代码

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

  8. if not isFind:
  9.     print("找不到!")
复制代码

这样可以大幅提高查找速度!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2025-3-19 20:32:50 | 显示全部楼层    本楼为最佳答案   
  1. for i in range(10000):  #这里为啥是10000,有什么意义吗?#
复制代码

           循环 10000 次
  1. for i in range(n):  
  2.      for j in range(i+1, n):  #这里为啥是i+1到n嘞?#
复制代码

           j 从 i + 1 起步开始循环,目的是为了避免出现 j == i 。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-5-25 22:19

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表