鱼C论坛

 找回密码
 立即注册
查看: 132|回复: 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
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 。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 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[i] + nums[j] == 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[i] + nums[j] == target:     
            print(f"找到两个数:{nums[i]} + {nums[j]} = {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 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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 。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-4-3 04:37

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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