第一次写python,大部分时间花在看语法上了,本来想着删除0,结果莫名就过去了
n = int(input()) listt = list(map(lambda x:int(x), input().split())) listt.sort() if len(listt) == 3: print(listt[0] * listt [1] * listt[2]) elif len(listt) >= 3: max = listt[-2]*listt[-3] if max < listt[0]*listt[1]: max = listt[1]*listt[0] print(listt[-1]*max)
# 方法一 def pri(m,a): if m<3: return 0 result_p = [0,0,0] # 正数 result_n = [0,0,0] # 负数 num_0 = 0 for i in a: if i>result_p[0]: # 正数前3或包括0的前三大 result_p[0]=i result_p.sort() if i<0: # 负数前3或包括0的前三小 if result_n[-1]==0: result_n[-1]=i result_n.sort() elif i<result_n[-1]: result_n[-1]=i result_n.sort() if i==0: num_0 += 1 while result_p[0]==0: # 删除正数列表中的0项 del result_p[0] if not result_p: # 如果都是0,删除完了 break while result_n[-1]==0: # 删除负数列表中的0项 del result_n[-1] if not result_n: # 如果都是0,删除完了 break if num_0>0: result_0 = [0,0,0] # 如果0超级多不至于占内存,用一个0的话return中可能溢出指针 else: result_0 = [] result = result_n+result_0+result_p return max(result[0]*result[1]*result[-1],result[-3]*result[-2]*result[-1]) m = int(input()) a = list(map(int,input().split(' '))) print(pri(m,a))
#方法二 分别求出max1,max2,max3,min2,min1 def pri(m,a): if m<3: return 0 def get_max(b): max_ = b[0] max_index = 0 for i in range(len(b)): if b[i]>max_: max_ = b[i] max_index = i return max_,max_index def get_min(b): min_ = b[0] min_index = 0 for i in range(len(b)): if b[i]<min_: min_ = b[i] min_index = i return min_,min_index max1,max_index = get_max(a) del a[max_index] max2,max_index = get_max(a) del a[max_index] max3,max_index = get_max(a) a.extend([max1,max2]) min1,min_index = get_min(a) del a[min_index] min2,min_index = get_min(a) return max(min1*min2*max1,max1*max2*max3) m = int(input()) a = list(map(int,input().split(' '))) print(pri(m,a))
def method(num): min_s = [] max_s = [] for i in num: if i<=0: if not min_s or len(min_s)<3: min_s.append(i) min_s.sort() elif i<min_s[-1]: k = len(min_s) while k>0 and i<min_s[k-1]: k-=1 min_s[k] = min_s[k-1] min_s[k] = i else: if not max_s or len(max_s)<3: max_s.append(i) max_s.sort(reverse=True) elif i>max_s[-1]: w = len(max_s) while w>0 and i>max_s[w-1]: w -= 1 max_s[w] = max_s[w-1] max_s[w] = i new = min_s + max_s[::-1] #print(new,min_s,max_s) return max(new[0]*new[1]*new[-1],new[-1]*new[-2]*new[-3]) if __name__=='__main__': n = int(input().strip()) num = list(map(int,input().split())) print(method(num))
n=input() n=list(map(int,input().split())) n.sort() print(max(n[0]*n[1]*n[-1],n[-1]*n[-2]*n[-3]))
这里题有问题,必须在第一行加个n才能运行。
三个最大的数,无非有几种情况,绝对值最大的三个数
因此所有的情况都只有两种算法:排序后的最大三个数相乘或者排序后的最小两个数相乘再乘以最大的数。
n = int(input()) l = map(int,input().split()) l = sorted(l) res = max(l[0]*l[1]*l[2],l[-3]*l[-2]*l[-1],l[0]*l[1]*l[-1],l[0]*l[-2]*l[-1]) print(res)
import sys num = list() # 用来存储数据 for i in range(2): a = sys.stdin.readline().strip().split() a = list(map(int, a)) num.append(a) num[1].sort() d=num[1] max_num=max(d[0]*d[1]*d[-1],d[-1]*d[-2]*d[-3]) print(max_num)
n=eval(input().strip()) datas=list(map(int,input().strip().split())) max1,max2,max3=[min(datas)]*3 min2,min1=[max(datas)]*2 for i in range(len(datas)): if datas[i]<min1: min2=min1 min1=datas[i] elif datas[i]<min2: min2=datas[i] if datas[i]>max1: max3=max2 max2=max1 max1=datas[i] elif max2<datas[i]: max3=max2 max2=datas[i] elif max3<datas[i]: max3=datas[i] maxresult=max(max1*max2*max3,max1*min1*min2) print(maxresult)
n = int(input()) num = sorted(map(int, raw_input().split())) print max(num[0]*num[1]*num[-1],num[-3]*num[-2]*num[-2])好奇怪,同样的思路,python3能100%通过,python2只有88%的通过率。有大神能解释下吗😥
本题有缺陷:示例中不包含输入的数组长度,而测试代码中含有行数 思路:先拆分输入的数组,按从大到小的顺序排列,内置函数sort() 考虑负数个数,内置函数len() 如果没有负数或只有一个负数,最大乘积就是数列最后三位数的乘积 如果有两个及以上的负数,最大乘积有两种可能:最小的两负数*最大的正数,最大的三个正数乘积,取最大值即可。
long = int(input('')) #这里也未考虑输入的数组和输入的数组长度不符的现象,只需要加个报错就好 an = input("") #输入数组 nums = [] #使用列表存储 for item in an.split(' '): #拆分数组 if '-' in item: #如果是负数,则带有‘-’号 nums.append(int(item.split('-')[1])*(-1)) #列表中存入整型 else: #正数及0 nums.append(int(item)) nums.sort() #升序排序 length_lose = len([item for item in nums if item<0]) #获取负数个数 multi = 1 #定义初始乘积为1 if length_lose<2: #没有负数或只有一个负数 for item in nums[:-4:-1]: multi=multi*item else: #有两个及以上的负数 multi_1 = nums[0]*nums[1]*nums[-1] multi_2 = nums[-1]*nums[-2]*nums[-3] multi = max(multi_1,multi_2) print(multi)
n = int(input())#题目有BUG,根本没有给出第一行输入的是长度 A = list(map(int, input().split())) A.sort() print(max(A[-1]*A[-2]*A[-3], A[0]*A[1]*A[-1]))
import sys n=int(sys.stdin.readline().strip()) nums=sys.stdin.readline().strip() nums=list(map(int, nums.split())) #1.当数组的最大值<=0或者是数组的最小值>=0时,乘积最大就是数组中TOP3的乘积; #2.除第一种情况外,就需要考虑数组中的最大的3个数和最小的2个数 max3=[] min2=[] for i in range(n): max3.sort() min2.sort() if len(max3)<3: max3.append(nums[i]) elif nums[i]>max3[0]: max3[0]=nums[i] if len(min2)<2: min2.append(nums[i]) elif nums[i]<min2[1]: min2[1]=nums[i] max3.sort() min2.sort() a=max3[0]*max3[1]*max3[2] b=min2[0]*min2[1]*max3[2] max3mul=a if a>=b else b #print(max3,min2) print(str(max3mul))