题目描述
题目内容:
给定一个包含若干个整数的列表alist,要求返回输出列表blist,blist中的元素为除与alist对应位置上的元素之外其余各元素的乘积。
输入格式:
共一行,列表中的元素以空格隔开。
输出格式:
共一行,为一个列表。
输入样例:
1 2 3
输出样例:
[6, 3, 2]
(注:原列表的1,对应输出6=23,原列表的2,对应输出3=13,原列表的3,对应输出2=1*2)
时间限制:500ms内存限制:32000kb
解题思路
原始思路
- 先计算原始列表中数的乘积
- 新列表的每个位置对应的数即为原始列表的乘积除以其对应位置的值
a = list(map(int,input().split()))
ap = 1
for i in range(len(a)):
ap *= a[i]
b = []
bp = 1
for j in range(len(a)):
bp = int(ap/a[j])
b.append(bp)
print(b)
思路缺陷
如果列表中存在一个值为0,那么原始思路将错的极为彻底
思路改进
- 可以创建一个与原始列表相同的列表,这样每次计算乘积时可利用该列表进行计算
- 由于原始列表并未改变,因此每次在计算乘积时可将原始列表重新引入并删除对应位置的数值
解题代码
a = list(map(int,input().split()))
b = []
for i in a:
ac = a[:]
ac.remove(i)
print(ac)
p = 1
for j in ac:
p *= j
b.append(p)
print(b)