用Python怎么做

给定一个列表和一个目标值N, 列表中元素均为不重复的整数。
请从该列表中找出乘为目标位的两个整数,然后只返回其对小领下标组合。N的信由用户输入。
列表中的值1到100
注意·列表中同一个元素不能使用两遍。

  • 代码运行效果截屏图片
    一、默认目标整数88

    img


    img


    输入非数字字符串或者不输入直接回车,默认目标整数88。

    二、目标整数45

    img



    三、上标整数99

    img


  由于列表数多,一般不只一对下标满足题意。题目有要求,只能输出字典序较小的一对下标。我采用的是for循环遍历,且是从小到大,找到的第一对符题的下标即是字典序最小,退出两层for循环,打印下标即可。

Python代码

#!/sur/bin/nve python
# coding: utf-8
from random import shuffle
lis = list(range(1, 101))
shuffle(lis)
print('\n100个整数列表:\n', lis)

target = input('\n输入目标整数(如88):') 
target = 88 if not target.isdigit() else int(target) # 如果输入非数字字符,默认目标整数为88。


for i in range(100):

    for j in range(i+1, 100):
        mybool = lis[i]*lis[j] == target # 达成条件bool值。
        
        if mybool:
            #print(i,j) #调试用语句。
            break # 退出内层循环。

    if mybool:
        break # 退出首层循环。

#print(i,j) # 调试用语句。
print(f"\n{lis[i]} × {lis[j]} = {target},({i}, {j})")

通过使用哈希表来解决。我们可以遍历列表,对于每个元素,我们检查它是否在哈希表中,如果在,那么我们找到了一对乘积为目标值的元素,如果不在,我们就将目标值除以当前元素的结果存入哈希表。这样的话当我们遇到一个新元素时,只需要查看它是否在哈希表中就可以了

def find_pair(lst, target):
    if not lst or len(lst) < 2:
        return None

    hash_table = {}
    for i, num in enumerate(lst):
        if num in hash_table:
            return [hash_table[num], i]
        else:
            if target % num == 0:
                hash_table[target // num] = i

    return None

# 测试
lst = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
target = 20
print(find_pair(lst, target)) 

N = int(input('目标值: '))
count = 0
result = []

if N <= 100:
    num = [ i for i in range(1,N+1) ]
else:
    num = [i for i in range(1, 101)]

while count < len(num):
    start = num[count]   
    for i in num[count+1:]:
        if start * i == N:
            result.append( (start,i) )
            break
        else:
            continue
    count += 1


print(result)

【以下回答由 GPT 生成】

解决方案如下:

Step 1: 获取用户输入的目标值N

N = int(input("请输入目标值N:"))

Step 2: 创建一个列表,包含不重复的整数元素

nums = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]  # 这里以示例为准,可以根据实际情况修改

Step 3: 创建一个空字典,用于记录每个元素的索引

index_map = {}

Step 4: 遍历列表中的每个元素,将元素和对应的索引存入字典

for i, num in enumerate(nums):
    index_map[num] = i

Step 5: 遍历列表中的每个元素,检查是否存在另一个乘积等于目标值N的元素

for i, num in enumerate(nums):
    complement = N / num
    if complement in index_map and index_map[complement] != i:
        # 找到了符合条件的元素
        return [i, index_map[complement]]

Step 6: 若未找到符合条件的元素,返回空列表

return []

完整代码如下:

def find_product_indices(N, nums):
    index_map = {}
    for i, num in enumerate(nums):
        index_map[num] = i
    for i, num in enumerate(nums):
        complement = N / num
        if complement in index_map and index_map[complement] != i:
            return [i, index_map[complement]]
    return []


N = int(input("请输入目标值N:"))
nums = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]  # 请根据实际情况修改列表元素
result = find_product_indices(N, nums)
print("目标值N的乘积索引组合:", result)

请注意,由于列表中的元素取值范围为1到100,且同一个元素不能被重复使用两次,所以在这个例子中,我们可以通过遍历整个列表并检查除数和被除数之间的乘积来找到目标值的索引组合。但如果列表中的元素取值范围不确定,或者同一个元素可以使用多次,可能需要使用其他算法。



【相关推荐】



如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^