首页 > 试题广场 >

编程题2

[编程题]编程题2
  • 热度指数:4357 时间限制:C/C++ 3秒,其他语言6秒 空间限制:C/C++ 128M,其他语言256M
  • 算法知识视频讲解

给定一个数组序列, 需要求选出一个区间, 使得该区间是所有区间中经过如下计算的值最大的一个:

区间中的最小数 * 区间所有数的和最后程序输出经过计算后的最大值即可,不需要输出具体的区间。如给定序列  [6 2 1]则根据上述公式, 可得到所有可以选定各个区间的计算值:

 

[6] = 6 * 6 = 36;

[2] = 2 * 2 = 4;

[1] = 1 * 1 = 1;

[6,2] = 2 * 8 = 16;

[2,1] = 1 * 3 = 3;

[6, 2, 1] = 1 * 9 = 9;

 

从上述计算可见选定区间 [6] ,计算值为 36, 则程序输出为 36。

区间内的所有数字都在[0, 100]的范围内;


输入描述:
第一行输入数组序列长度n,第二行输入数组序列。
对于 50%的数据,  1 <= n <= 10000;
对于 100%的数据, 1 <= n <= 500000;


输出描述:
输出数组经过计算后的最大值。
示例1

输入

3
6 2 1

输出

36
num = int(input())
list1= (input().split())
for i in range (0,len(list1)):
    list1[i]=int(list1[i])
print (list1)
list2 = []
for j in range (0,num):
     for k in range (j, num):   
            summary = sum(list1[j:k+1])
            list2.append(summary*min(list1[j:k+1]))
print (max(list2))
萌新尝试了这个,因为python代码真的学的太浅只能这么写,为啥只过20%qwq
发表于 2020-04-12 15:10:54 回复(0)
if __name__ == "__main__":
    n = int(input())
    inlist = list(map(int,input().split()))

    res = 0
    for i in range(n):
        tmp = inlist[i]
        if tmp == 0:
            continue
        l = r = i
        while l - 1 >= 0 and inlist[l - 1] >= tmp:
            l -= 1
        while r + 1 < n and inlist[r + 1] >= tmp:
            r += 1
        res = max(res, tmp * sum(inlist[l:r + 1]))
    print(res)

遍历每个数,并找出该数的最大区间,即该数在区间中最小,加总求积,已AC

编辑于 2019-08-14 08:21:30 回复(0)
n = int(input())

nums = list(map(int, input().strip().split()))
res = 0
for i in range(n):
    # 取当前值为最小值
    min_ = nums[i]
    sum_ = nums[i]
    res = max(res, nums[i] * nums[i])
    for j in range(i + 1, n):
        # 更新最小值
        min_ = min(min_, nums[j])
        sum_ += nums[j]
        res = max(res, min_*sum_)
print(res)

求助!!
思路:i指向当前数字,j指向i之后的数字,遍历整个数组。通过率只有60%,请问代码该怎么完善呀?谢谢各位大佬!!
发表于 2019-03-15 15:59:15 回复(0)
N = int(input())
a=[int(i) for i in input().split()]
b=a.copy()
a.sort()
M=a[N-1]*a[N-1]
M2=a[0]*sum(a)
if M<M2:
    M=M2
def getmax(x,y):
    global M
    tmp=0
    newlist=[]
    for i in range(y):
        if x+i<N:
            newlist.append(b[x+i])
    newlist.sort()
    tmp=sum(newlist)*newlist[0]
    if tmp>M:
        M=tmp
    if x+y<=N:
        getmax(x+1,y)

for i in range(2,N):
    getmax(0,i)

print(M)
只通过了20%不知道哪里错了
发表于 2019-03-14 16:08:40 回复(0)