鱼C论坛

 找回密码
 立即注册
楼主: zltzlt

[已解决]Python:每日一题 268

[复制链接]
发表于 2019-11-3 13:10:04 | 显示全部楼层
zltzlt 发表于 2019-11-3 13:03
解答错误

输入:[1,1]

改好了:
  1. def solve(put:list,who:bool=False)->int:
  2.     le = len(put)
  3.     min_one = put[0]
  4.     sub = [put[0]]
  5.     for i in range(le):
  6.         for j in range(i+1,le+1):
  7.             one = sum(put[i:j])
  8.             if one < min_one:
  9.                 min_one = one
  10.                 sub = put[i:j]
  11.             #这一节循环体,要是不判断到底是哪个子数组的话,直接换成下一行注释掉的代码
  12.             #min_one = min(min_one,sum(put[i:j]))
  13.     if who:
  14.         print(sub)
  15.     return min_one

  16. def solve_beta(put:list,who:bool=False)->int:
  17.     le = len(put)
  18.     min_one = put[0]
  19.     sub = [put[0]]#这一行可以注释掉
  20.     #一步开一枪,直逼对方面门
  21.     for i in range(le):
  22.         one = put[i]
  23.         for j in range(i+1,le+1):
  24.             if j < le:
  25.                 one += put[j]
  26.             if one < min_one:
  27.                 min_one = one
  28.                 sub = put[i:j]#这一行也可以注释掉
  29.     if who:#这个判断可以注释掉
  30.         print(sub)
  31.     return min_one

  32. if __name__ == '__main__':
  33.     print('示例1 -3 输出:',solve([1,-1,-2,1]))
  34.     print('示例2 -6 输出:',solve([1,-1,-2,1,-4]))
  35.     print('之前错的 1 输出:',solve([1,1]))
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-11-3 14:56:22 | 显示全部楼层
那不是不止两个数
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-11-3 15:18:30 | 显示全部楼层
list1=eval(input("请输入一个列表:"))
length=len(list1)
list3=[]
list4=[]
for i in range(length):
    for j in range(length):
        if (j+1)>i:
            
            list2=list1[i:j+1]
            list3.extend([list2])
        else:
            list2=list1[j+1:i]
            list3.extend([list2])
for each in list3:
    num=sum(each)
    list4.append(num)
s=min(list4)
print(s)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-11-3 15:20:20 | 显示全部楼层
list1=eval(input("请输入一个列表:"))
length=len(list1)
list3=[]
list4=[]
for i in range(length):
    for j in range(length):
        if (j+1)>i:
            
            list2=list1[i:j+1]
            list3.extend([list2])
        else:
            list2=list1[j+1:i]
            list3.extend([list2])
for each in list3:
    num=sum(each)
    list4.append(num)
s=min(list4)
print(s)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-11-3 16:05:56 | 显示全部楼层
1394116864 发表于 2019-11-3 15:18
list1=eval(input("请输入一个列表:"))
length=len(list1)
list3=[]

如何正确地发代码、上传图片和附件?
https://fishc.com.cn/thread-52272-1-1.html
(出处: 鱼C论坛——小甲鱼)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-11-3 16:14:14 | 显示全部楼层
1394116864 发表于 2019-11-3 15:20
list1=eval(input("请输入一个列表:"))
length=len(list1)
list3=[]

解答错误

输入:[1,1]
输出:0
预期结果:1
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-11-3 16:17:38 | 显示全部楼层
本帖最后由 爱吃鱼的mao 于 2019-11-3 16:23 编辑

看错了...改回来了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-11-3 16:18:28 | 显示全部楼层
zltzlt 发表于 2019-11-3 13:02
解答错误

输入:[-5,10,-4]
  1. def minSubArray(nums:list):
  2.     if nums == []:
  3.         return None
  4.     sums = 0      
  5.     ans = nums[0]     
  6.     for i in range(len(nums)):
  7.         sums = min(sums + nums[i], nums[i])     
  8.         if sums < ans:      
  9.             ans = sums
  10.     return ans
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-11-3 17:11:41 | 显示全部楼层
zltzlt 发表于 2019-11-3 16:14
解答错误

输入:[1,1]

list1=eval(input("请输入一个列表:"))
length=len(list1)
list3=[]
list4=[]
for i in range(length):
    for j in range(length):
        
            
        if (j+1)>i:
            
            list2=list1[i:j+1]
            list3.extend([list2])
        elif (j+1)<i:
            list2=list1[j+1:i]
            list3.extend([list2])
        else:
            pass
for each in list3:
    num=sum(each)
    list4.append(num)
s=min(list4)
print(s)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-11-3 17:39:56 | 显示全部楼层
百度了一下,好像又理解错了。不过最后还是拉回来了。所以这次上传的代码可能有点乱。
不过 也可以在我上一次代码上 添加判断   如果都大于0  返回最小的一个数。
创建一个空列表x  判断小于0 的添加进空列表   返回x的和。

  1. def  find_min(lists) :
  2.         n =len(lists)+1
  3.         d = []
  4.         m = []
  5.         mmm = []
  6.         a= sum(lists)
  7.         for j  in range(n):
  8.                 for k in range(n):
  9.                         b = lists[j:k]
  10.                         b.sort()
  11.                         if b != d :
  12.                                 m.append(b)
  13.         for mm  in range (len(m)) :
  14.                 cc = sum(m[mm])
  15.                 mmm.append(cc)
  16.         mmm.sort()
  17.         return mmm[0]
复制代码

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-11-3 17:40:40 | 显示全部楼层
Jacques666 发表于 2019-11-3 17:39
百度了一下,好像又理解错了。不过最后还是拉回来了。所以这次上传的代码可能有点乱。
不过 也可以在我上 ...

我只想赚一点鱼币  
但是感觉太难了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-11-3 17:44:10 | 显示全部楼层
Jacques666 发表于 2019-11-3 17:39
百度了一下,好像又理解错了。不过最后还是拉回来了。所以这次上传的代码可能有点乱。
不过 也可以在我上 ...

我就想赚点鱼币买资料
  1. def  find_min(lists) :
  2.         n = []
  3.         lists.sort()
  4.         if lists[0]>0 :
  5.                 return lists[0]
  6.         for i in range(len(lists)) :
  7.                 if lists[i] < 0 :
  8.                         n.append(lists[i])
  9.         return sum(n)
  10.                
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-11-3 17:47:30 | 显示全部楼层
Jacques666 发表于 2019-11-3 17:44
我就想赚点鱼币买资料
  1. def  find_min(lists) :
  2.         n = []
  3.         lists.sort()
  4.         if lists[0]>0 :
  5.                 return lists[0]
  6.         for i in range(len(lists)) :
  7.                 if lists[i] < 0 :
  8.                         n.append(lists[i])       
  9.         print(sum(n))
  10.        
复制代码

       
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-11-3 17:48:39 | 显示全部楼层
Jacques666 发表于 2019-11-3 17:39
百度了一下,好像又理解错了。不过最后还是拉回来了。所以这次上传的代码可能有点乱。
不过 也可以在我上 ...
  1. def  find_min(lists) :
  2.         n =len(lists)+1
  3.         d = []
  4.         m = []
  5.         mmm = []
  6.         a= sum(lists)
  7.         for j  in range(n):
  8.                 for k in range(n):
  9.                         b = lists[j:k]
  10.                         b.sort()
  11.                         if b != d :
  12.                                 m.append(b)
  13.         for mm  in range (len(m)) :
  14.                 cc = sum(m[mm])
  15.                 mmm.append(cc)
  16.         mmm.sort()
  17.         print(mmm[0])
复制代码

评分

参与人数 1荣誉 +1 鱼币 +1 贡献 +1 收起 理由
zltzlt + 1 + 1 + 1

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-11-3 23:27:40 | 显示全部楼层
本帖最后由 angtn 于 2019-11-3 23:30 编辑
  1. def echo(lst):
  2.         summ = 0
  3.         minlst = lst[0]
  4.         maxlst = 0
  5.         for i in lst:
  6.             summ += i
  7.             if summ - maxlst < minlst:
  8.                 minlst = summ - maxlst
  9.             if summ > maxlst:
  10.                 maxlst = summ
  11.         return minlst
复制代码

评分

参与人数 1荣誉 +1 鱼币 +1 贡献 +1 收起 理由
zltzlt + 1 + 1 + 1

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-11-4 10:55:35 | 显示全部楼层    本楼为最佳答案   
本帖最后由 XiaoPaiShen 于 2019-11-4 11:06 编辑
  1. def min_sub(source):
  2.     min_ending = source[0]
  3.     min_so_far = source[0]

  4.     for i in range(1, len(source)):
  5.         
  6.         if min_ending > 0:
  7.             min_ending = source[i]
  8.         else:
  9.             min_ending += source[i]

  10.         min_so_far = min(min_so_far, min_ending)

  11.     return min_so_far
复制代码

评分

参与人数 1荣誉 +1 鱼币 +1 贡献 +1 收起 理由
zltzlt + 1 + 1 + 1

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-11-4 15:04:40 | 显示全部楼层
本帖最后由 Astray.R 于 2019-11-4 15:06 编辑
  1. def f(x):
  2.     s2 = '1'              #测试多于1个子数组的标记
  3.     for i in range(len(x)-1):
  4.         a = x[:]
  5.         s1 = 0      
  6.         
  7.         if x[i]+1 == x[i+1] or x[i]-1 == x[i+1]:
  8.             s1 = x[i]+x[i+1]           #含有连续子数组
  9.             a[i] = s1
  10.             del a[i+1]
  11.             b = len(a)
  12.             print(1,s1,i)
  13.             for j in range(i):
  14.                 if sum(a[j:i+1])<s1:
  15.                     s1 = sum(a[j:i+1])
  16.                 else:
  17.                     continue
  18.             print(2,s1)
  19.             for k in range(len(x)-i-1):
  20.                 if sum(a[i:i+k+1])<s1:
  21.                     s1 = sum(a[i:b+k+1])
  22.                 else:
  23.                     continue
  24.             print(3,s1)
  25.             if s2 =='1':
  26.                 s2 = s1
  27.             elif s2>s1:
  28.                 s2 = s1
  29.             else:
  30.                 s2 = s2
  31.         else:
  32.             continue
  33.     if s2 == '1':
  34.         print('不含连续的子数组')
  35.     else:
  36.         print(s2)
复制代码


不知道对不对

评分

参与人数 1荣誉 +1 鱼币 +1 收起 理由
zltzlt + 1 + 1

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-11-4 17:00:39 | 显示全部楼层
本帖最后由 122815306 于 2019-11-4 17:02 编辑
  1. def min_list(list):
  2.     list_t = []
  3.     sum = 0
  4.     if list==[]:
  5.         return '请勿输入空数组'
  6.     else:
  7.         for i in range(len(list)):
  8.             for j in range(i,len(list)):
  9.                 sum += list[j]
  10.                 list_t.append(sum)
  11.             sum = 0

  12.         min_list = min(list_t)
  13.         return min_list
复制代码

评分

参与人数 1贡献 +1 收起 理由
zltzlt + 1

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-11-4 19:39:27 | 显示全部楼层
  1. def answer(lst: list):
  2.     min_num = min(lst)
  3.     lenth = len(lst)
  4.     list1 = []
  5.     res = []
  6.     for i in range(lenth):
  7.         if lst[i] == min_num:
  8.             list1.append(i)
  9.     for num in list1:
  10.         if num == 0:
  11.             right = temp = 0
  12.             for i in range(num + 1, lenth):
  13.                 temp += lst[i]
  14.                 right = min(right, temp)
  15.             if right < 0:
  16.                 res.append(min_num + right)
  17.             else:
  18.                 res.append(min_num)
  19.         elif num == lenth - 1:
  20.             left = temp = 0
  21.             for i in range(lenth - 2, -1, -1):
  22.                 temp += lst[i]
  23.                 left = min(left, temp)
  24.             if left < 0:
  25.                 res.append(min_num + left)
  26.             else:
  27.                 res.append(min_num)
  28.         else:
  29.             left = right = temp = 0
  30.             for i in range(num + 1, lenth):
  31.                 temp += lst[i]
  32.                 right = min(right, temp)
  33.             temp = 0
  34.             for i in range(num - 1, -1, -1):
  35.                 temp += lst[i]
  36.                 left = min(left, temp)
  37.             temp = min_num
  38.             if left < 0:
  39.                 temp += left
  40.             if right < 0:
  41.                 temp += right
  42.             res.append(temp)
  43.     return min(res)
复制代码


想了种算法,跑了下前面长序列可以秒出(答案-2314),但不知道结果对不对,请题主帮忙验算。@zltzlt

评分

参与人数 1荣誉 +1 鱼币 +1 贡献 +1 收起 理由
zltzlt + 1 + 1 + 1

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-11-5 01:10:10 | 显示全部楼层
  1. def Min_Sum(list1):

  2.     list2 = [abs(i) for i in list1]
  3.     if sum(list1) == sum(list2):
  4.         return min(list1)
  5.     if abs(sum(list1)) == sum(list2):
  6.         return sum(list1)
  7.     while 0 in list1:
  8.         list1.remove(0)

  9.     new_list=[]
  10.     index = 0
  11.     for i in range(1,len(list1)):
  12.         if list1[i] * list1[i-1] > 0:
  13.             pass
  14.         else:
  15.             new_list.append(sum(list1[index:i]))
  16.             index = i
  17.     new_list.append(sum(list1[index:]))
  18.     if new_list[0] > 0:
  19.         new_list.remove(new_list[0])
  20.     if new_list[-1] > 0:
  21.         new_list.pop()
  22.     min_sum = min(new_list)

  23.     i=1
  24.     while i < len(new_list)-1:
  25.         if new_list[i-1] + new_list[i] >=0:
  26.             i += 2
  27.             continue
  28.         else:
  29.             new_list[i + 1] = new_list[i - 1] + new_list[i] + new_list[i + 1]
  30.             if new_list[i + 1] < min_sum:
  31.                 min_sum = new_list[i + 1]
  32.             i += 2
  33.     return min_sum
复制代码

评分

参与人数 1荣誉 +1 鱼币 +1 贡献 +1 收起 理由
zltzlt + 1 + 1 + 1

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-6-3 20:10

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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