鱼C论坛

 找回密码
 立即注册
查看: 1509|回复: 22

[技术交流] Python:每日一题 176

[复制链接]
最佳答案
854 
发表于 2018-4-12 20:49:32 | 显示全部楼层 |阅读模式

马上注册加入鱼C,享用更多服务吧^_^

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
本帖最后由 冬雪雪冬 于 2018-4-13 15:05 编辑

我们的玩法做了一下改变:

1. 楼主不再提供答案。
2. 请大家先独立思考,再参考其他鱼油的解答,这样才有助于自己编程水平的提高。开始阶段是看不到其他人的回帖的,等答题完成,开始评分时再取消限制。
3. 鼓励大家积极答题,奖励的期限为出题后24小时内。
4. 根据答案的质量给予1~3鱼币的奖励。

题目:
将一个整数列表分隔为两个列表,使两个列表数字之和的差值的绝对值最小。
例如列表为[872, 4345, -729, 0, 9988, 123456, 7171, 44, -3]
可以分割为[872, 4345, -729, 0, 9988]和[123456, 7171, 44, -3]
也可以分割为[872, 4345, -729, 0, 9988, 12]和[3456, 7171, 44, -3]
即可以在数字之间分隔,也可以在数字内部按位分隔。

注:分隔不能调整前后的次序,-12不能分割为-和12

评分

参与人数 1鱼币 +1 收起 理由
天圆突破 + 1 是差值的绝对值还是列表前-列表后的差值?

查看全部评分

本帖被以下淘专辑推荐:

最佳答案
252 
发表于 2018-4-12 21:55:19 | 显示全部楼层
本帖最后由 塔利班 于 2018-4-13 18:21 编辑
  1. def ssum(s):
  2.     if s=='':
  3.         return 0
  4.     else:
  5.         return eval(s)
  6. def cut(x):
  7.     L=[]
  8.     for i in range(len(x)):
  9.         a=x[i]
  10.         l=len(str(a))
  11.         if a>=0:
  12.             for j in range(0,l+1):
  13.                 L.append((i,j,abs(sum(x[:i])+ssum(str(a)[:j])-ssum(str(a)[j:])-sum(x[i+1:]))))
  14.         else:
  15.             for j in range(2,l+1):
  16.                 L.append((i,j,abs(sum(x[:i])+ssum(str(a)[:j])-ssum(str(a)[j:])-sum(x[i+1:]))))
  17.     a,b=sorted(L,key=lambda s:s[2])[0][:2]
  18.     if b==0:
  19.         return x[:a],x[a:]
  20.     elif b==len(str(x[a])):
  21.         return x[:a+1],x[a+1:]
  22.     else:
  23.         return x[:a]+[ssum(str(x[a])[:b])],[ssum(str(x[a])[b:])]+x[a+1:]

  24. print(cut([11,-22,33,-44,55,-66,77,-88]))
  25. print(cut(list(range(10))))
  26. print(cut([1]))
  27. print(cut([872,4345,-729,0,9988,123456,7171,44,-3]))
  28. print(cut([1,-2,1]))
  29. print(cut([5,2,1,2]))
  30. print(cut([5,-12,2]))
复制代码
最佳答案
30 
发表于 2018-4-12 22:41:42 | 显示全部楼层
本帖最后由 第四时空 于 2018-4-12 23:17 编辑
  1. def func(li: list) -> tuple:
  2.     max_abs = abs(max(li))
  3.     min_abs = abs(min(li))
  4.     difference_value = max_abs if max_abs > min_abs else min_abs
  5.     result_left_list = []
  6.     result_right_list = []

  7.     for list_index, elem in enumerate(li):
  8.         left_list = li[:list_index]
  9.         right_list = li[list_index + 1:]

  10.         str_elem = str(elem)
  11.         for elem_index, e in enumerate(str_elem):
  12.             if e == "-":
  13.                 continue

  14.             left_elem = str_elem[:elem_index + 1]
  15.             right_elem = str_elem[elem_index + 1:]

  16.             value = sum(left_list, int(left_elem or 0)) - sum(right_list, int(right_elem or 0))
  17.             if abs(value) <= difference_value:
  18.                 difference_value = abs(value)
  19.                 result_left_list = left_list + ([int(left_elem)] if left_elem != "" else [])
  20.                 result_right_list = ([int(right_elem)] if right_elem != "" else []) + right_list

  21.     return result_left_list, result_right_list


  22. if __name__ == "__main__":
  23.     list_1 = [872, 4345, -729, 0, 9988, 123456, 7171, 44, -3]
  24.     list_2 = [1, 1, 1, 1]
  25.     list_3 = [0, 0, 0, 0, 0]
  26.     list_4 = [-2, -2, -2, -2]
  27.     list_5 = [1, 1, 1, 2]
  28.     list_6 = [10, -10, -10, 10]
  29.     list_7 = [10, -10, 10, -10, 0, 0]
  30.     list_8 = [20, -10, -10, 10]

  31.     for i in [list_1, list_2, list_3, list_4, list_5, list_6, list_7, list_8]:
  32.         print(*func(i))
复制代码
最佳答案
13 
发表于 2018-4-13 09:06:41 | 显示全部楼层
本帖最后由 shigure_takimi 于 2018-4-16 09:05 编辑
  1. def f(aList):
  2.     list1 = []
  3.     list2 = []
  4.     b = str(aList)
  5.     b = ''.join(b.split())  # 去除空格
  6.     length = len(b)
  7.     minSub = float('inf')
  8.     for i in range(2,length-1):
  9.         x = b[:i]+']'
  10.         y = '['+b[i:]
  11.         if x[-2] == '-' or y[1] == ',' or y[1] == '0':
  12.             continue
  13.         else:
  14.             x = eval(x)
  15.             y = eval(y)
  16.             sub = abs(sum(x) - sum(y))
  17.             if sub < minSub:
  18.                 minSub = sub
  19.                 list1, list2 = x, y
  20.     return list1, list2
  21.                
  22.                
  23. list1 = [872, 4345, -729, 0, 9988, 123456, 7171, 44, -3]
  24. print(f(list1))

  25. >>>  ([872, 4345, -729, 0, 9988, 12], [3456, 7171, 44, -3])
复制代码
最佳答案
0 
发表于 2018-4-13 10:04:07 | 显示全部楼层
本帖最后由 晓屁屁 于 2018-4-13 11:50 编辑

数字之和是个数之和还是相加之和?
最佳答案
0 
发表于 2018-4-13 13:11:51 | 显示全部楼层
  1. arr=[872, 4345, -729, 0, 9988, 123456, 7171, 44, -3]
  2. xmax=sum(arr)
  3. for k in range(len(arr)):   
  4.     s1,s2=sum(arr[:k]),sum(arr[k+1:])   
  5.     x=str(arr[k])
  6.     for i in range(len(x)+1):
  7.         m1,m2=x[:i],x[i:]
  8.         if m1=='-':
  9.             continue
  10.         n1=0 if m1=='' else int(m1)
  11.         n2=0 if m2=='' else int(m2)
  12.         tmp=abs(s1+n1-s2-n2)
  13.         if xmax>=tmp:
  14.             xmax=tmp     
  15.             res1,res2=arr[:k],arr[k+1:]      
  16.             if m1!='':
  17.                 res1.append(n1)
  18.             if m2!='':
  19.                 res2.insert(0,n2)
  20. print(res1,res2,xmax)
复制代码

评分

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

查看全部评分

最佳答案
1 
发表于 2018-4-13 13:25:45 | 显示全部楼层
本帖最后由 天圆突破 于 2018-4-13 14:30 编辑
  1. import re
  2. from functools import reduce
  3. def num(string):
  4.     return list(map(lambda x: int(x),re.findall('[-\d]+',string)))

  5. def main(lst):
  6.     lst = reduce(lambda x,y:x+'+'+y,map(lambda x:'('+str(x)+')',lst))
  7.     n, alllst= len(lst), list()
  8.     for i in range(1,n):
  9.         lsta,lstb = lst[:i],lst[i:]
  10.         try:
  11.             if lsta[-1] == '+':lsta = lsta[:-1]
  12.             else:lsta,lstb = lsta+')','('+lstb
  13.             a, b, c, d = eval(lsta), eval(lstb), num(lsta), num(lstb)
  14.             e = abs(a - b)
  15.             alllst.append([e, c, d])
  16.         except:pass
  17.     n = min(list(i[0] for i in alllst))
  18.     result = list(filter(lambda x: x[0] == n,alllst))
  19.     print('共有%d种分割,最小值为%d,分割方法如下:'%(len(result),n))
  20.     for each in result:
  21.         print(each[1],each[2])

  22. if __name__ == '__main__':
  23.     lst = [872, 4345, -729, 0, 9988, 123456, 7171, 44, -3]
  24.     main(lst)
复制代码
最佳答案
0 
发表于 2018-4-13 18:40:25 | 显示全部楼层
a=[872, 4345, -729, 0, 9988, 123456, 7171, 44, -3]
tt=[]
qq=[]
b=str(a).replace(' ','')
for i in range(len(b)-3):
    b_zuo=b[:(i+2)]+']'
    b_you='['+b[(i+2):]
    if b_zuo[-2]=='-':
        continue
    elif b_you[1]==',':
        continue
    else:
        b_zuo=eval(b_zuo)
        b_you=eval(b_you)
        num=abs(sum(b_zuo)-sum(b_you))
        tt.append(num)
        qq.append([b_zuo,b_you])
xx=tt.index(min(tt))
print(qq[xx][0] ,qq[xx][1])
最佳答案
0 
发表于 2018-4-13 19:29:20 From FishC Mobile | 显示全部楼层
本帖最后由 达锅 于 2018-4-13 23:56 编辑

这么快就公开了??
不理解差值最小,意思是切分后右边的和尽可能比左边大,还是左右两边尽可能接近?
反正就一个绝对值符号的差别,我就按绝对值最小计算了

这是转字符版的
def main(mlist):
    mtxt="".join(map(lambda x: str(x)+"p",mlist))#转换为字符,以p间隔
    def mc(mstr):#把字符重新转化为数字
        return [int(each) for each in mstr.replace("p",",").split(",") if each]#会存在空字符,需要过滤
    temp=((mc(mtxt[:i]),mc(mtxt[i:])) for i in range(1,len(mtxt))  if mtxt[i-1]!="-")#储存每一种可能,过滤负号
    return (min(temp,key=lambda x:abs(sum(x[0])-sum(x[1]))))#返回差值
   
print(main([872, 4345, -729, 0, 9988, 123456, 7171, 44, -3]))

这是转字符版第二稿,居然忘记eval函数了~
感谢@lan358088 提醒

def main(mlist):
    mtxt="".join(map(lambda x: str(x)+"+",mlist))[:-1]#转换为字符,以p间隔
    temp=[(mtxt[:i],mtxt[i:]) for i in range(1,len(mtxt)) if mtxt[i-1] not in '-+']
    return min(temp,key=lambda x:abs(eval(x[0])-eval(x[1])))
print(main([872, 4345, -729, 0, 9988, 123456, 7171, 44, -3]))

这是直接计算的
def main(mlist):
    mmin=[9999999,0]
    for mnum,mcont in enumerate(mlist):#循环读取列表
        for i in range(1,len(str(abs(mcont)))):#最高支持99位数
            mleft,mright=divmod(abs(mcont),10**i)#整除数为跟左边的列表,余数跟右边
            temp=mlist[:mnum]+[mleft*((abs(mcont)//mcont))],[mright]+mlist[mnum+1:]#中间有一个数的整除是取符号,应该有一个函数的,找不到
            msum=abs(sum(temp[0])-sum(temp[1]))#是不是应该求差值的绝对值最小?在公式前面加一个abs就行了
            mmin=(msum,temp) if msum<mmin[0] else mmin
    return mmin

print(main([872, 4345, -729, 0, 9988, 123456, 7171, 44, -3]))
最佳答案
13 
发表于 2018-4-13 20:05:52 | 显示全部楼层
还没评分呢,不知道作对没,有什么提高建议。
最佳答案
1 
发表于 2018-4-13 21:59:08 | 显示全部楼层
好像都没考虑存在一个最小值多个分割方式的情况啊,例如:
  1. [-631, 998, 509, -551, 546, 946, 37, -8, 40, -883]
  2. [[142, [-631, 998, 509, -5], [51, 546, 946, 37, -8, 40, -883]], [142, [-631, 998, 509, -55], [1, 546, 946, 37, -8, 40, -883]]]

  3. [716, -942, 139, -583, -206, 472, -978, -715, 142, 73]
  4. [[9, [716, -942, 139, -583, -206, 472, -9], [78, -715, 142, 73]], [9, [716, -942, 139, -583, -206, 472, -97], [8, -715, 142, 73]]]

  5. [342, 14, -668, 359, -481, -667, -144, -494, 742, 928]
  6. [[39, [342, 14, -6], [68, 359, -481, -667, -144, -494, 742, 928]], [39, [342, 14, -66], [8, 359, -481, -667, -144, -494, 742, 928]]]

  7. [900, 165, -472, 897, -788, 270, 836, 980, -995, 167]
  8. [[16, [900, 16], [5, -472, 897, -788, 270, 836, 980, -995, 167]], [16, [900, 165, -472, 897, -788, 270], [836, 980, -995, 167]]]

  9. [-655, -814, -296, 470, 275, 58, -173, 873, -847, -560]
  10. [[207, [-655, -814, -296, 470, 275, 58, -173, 8], [73, -847, -560]], [207, [-655, -814, -296, 470, 275, 58, -173, 873, -84], [7, -560]]]

  11. [-675, -10, 68, -772, -879, 877, -630, 622, -3, -550]
  12. [[133, [-675, -10, 68, -7], [72, -879, 877, -630, 622, -3, -550]], [133, [-675, -10, 68, -77], [2, -879, 877, -630, 622, -3, -550]]]

  13. [34, -374, 905, -979, -881, 158, -562, -703, 277, 269]
  14. [[58, [34, -374, 905, -979, -8], [81, 158, -562, -703, 277, 269]], [58, [34, -374, 905, -979, -88], [1, 158, -562, -703, 277, 269]]]

  15. [504, 937, 210, -693, -350, 897, 864, 526, 194, 471]
  16. [[258, [504, 937, 210], [-693, -350, 897, 864, 526, 194, 471]], [258, [504, 937, 210, -693, -350, 897, 8], [64, 526, 194, 471]]]

  17. [602, -696, -592, -995, 899, 821, -362, -46, 533, -665]
  18. [[93, [602, -696, -592, -995, 899, 821, -362, -46, 533, -6], [65]], [93, [602, -696, -592, -995, 899, 821, -362, -46, 533, -66], [5]]]

  19. [-554, -782, 302, -793, 816, -363, -827, 816, 135, 883]
  20. [[246, [-5], [54, -782, 302, -793, 816, -363, -827, 816, 135, 883]], [246, [-55], [4, -782, 302, -793, 816, -363, -827, 816, 135, 883]]]

  21. [20, -502, -441, -464, -393, -127, 31, -700, 438, 793]
  22. [[105, [20, -502, -4], [41, -464, -393, -127, 31, -700, 438, 793]], [105, [20, -502, -44], [1, -464, -393, -127, 31, -700, 438, 793]]]

  23. [-306, 807, -36, -122, -290, -19, -996, -209, -483, 289]
  24. [[332, [-306, 807, -36, -122, -290, -19, -9], [96, -209, -483, 289]], [332, [-306, 807, -36, -122, -290, -19, -99], [6, -209, -483, 289]]]

  25. [997, -722, -222, 453, -72, -614, 219, -436, -148, 946]
  26. [[97, [997, -722, -2], [22, 453, -72, -614, 219, -436, -148, 946]], [97, [997, -722, -22], [2, 453, -72, -614, 219, -436, -148, 946]]]

  27. [-417, 771, -344, -669, -381, -384, 132, 691, 355, -390]
  28. [[88, [-417, 771, -344, -6], [69, -381, -384, 132, 691, 355, -390]], [88, [-417, 771, -344, -66], [9, -381, -384, 132, 691, 355, -390]]]

  29. [-438, 449, -637, -356, 780, 831, -663, 213, -505, -665]
  30. [[115, [-438], [449, -637, -356, 780, 831, -663, 213, -505, -665]], [115, [-438, 449, -637, -356, 78], [0, 831, -663, 213, -505, -665]]]

  31. [147, -754, 537, 742, -983, 0, -881, -237, -848, 569]
  32. [[116, [147, -754, 537, 742, -983, 0, -8], [81, -237, -848, 569]], [116, [147, -754, 537, 742, -983, 0, -88], [1, -237, -848, 569]]]

  33. [536, 32, -723, -324, -884, -874, 337, -670, 972, -549]
  34. [[213, [536, 32, -723, -324, -8], [84, -874, 337, -670, 972, -549]], [213, [536, 32, -723, -324, -88], [4, -874, 337, -670, 972, -549]]]

  35. [272, 654, -848, 715, -742, -830, 271, 220, 376, -449]
  36. [[35, [272, 654, -848, 715, -742, -830, 271, 220, 376, -4], [49]], [35, [272, 654, -848, 715, -742, -830, 271, 220, 376, -44], [9]]]

  37. [-556, -298, 30, -747, -346, 927, 668, -747, 122, 355]
  38. [[25, [-5], [56, -298, 30, -747, -346, 927, 668, -747, 122, 355]], [25, [-55], [6, -298, 30, -747, -346, 927, 668, -747, 122, 355]]]

  39. [342, -128, 159, -359, -280, 743, 724, 326, -849, 172]
  40. [[104, [342, -128, 159], [-359, -280, 743, 724, 326, -849, 172]], [104, [342, -128, 159, -359, -280, 743], [724, 326, -849, 172]]]

  41. [107, -483, -777, 965, -888, -700, -293, -870, 379, 948]
  42. [[1, [107, -483, -7], [77, 965, -888, -700, -293, -870, 379, 948]], [1, [107, -483, -77], [7, 965, -888, -700, -293, -870, 379, 948]]]

  43. [-313, -776, -569, -725, 615, -516, -735, 412, 662, 406]
  44. [[54, [-313, -7], [76, -569, -725, 615, -516, -735, 412, 662, 406]], [54, [-313, -77], [6, -569, -725, 615, -516, -735, 412, 662, 406]]]

  45. [-199, -993, -149, -829, -25, 903, -156, 330, -391, 519]
  46. [[503, [-199, -9], [93, -149, -829, -25, 903, -156, 330, -391, 519]], [503, [-199, -99], [3, -149, -829, -25, 903, -156, 330, -391, 519]]]

  47. [600, -834, -883, -777, -345, -948, -777, 930, 798, -970]
  48. [[111, [600, -834, -883, -7], [77, -345, -948, -777, 930, 798, -970]], [111, [600, -834, -883, -77], [7, -345, -948, -777, 930, 798, -970]]]

  49. [-443, -799, 435, -736, 376, -768, 747, 333, 416, -92]
  50. [[41, [-4], [43, -799, 435, -736, 376, -768, 747, 333, 416, -92]], [41, [-44], [3, -799, 435, -736, 376, -768, 747, 333, 416, -92]]]

  51. [-863, 469, 659, -635, 271, -408, -667, -168, -502, -120]
  52. [[210, [-863, 469, 659, -635, 271, -408, -6], [67, -168, -502, -120]], [210, [-863, 469, 659, -635, 271, -408, -66], [7, -168, -502, -120]]]

  53. [997, 526, -475, -355, -894, -887, -436, -956, 932, 623]
  54. [[459, [997, 526, -475, -355, -894, -8], [87, -436, -956, 932, 623]], [459, [997, 526, -475, -355, -894, -88], [7, -436, -956, 932, 623]]]

  55. [-116, -811, -27, -991, -489, 546, -966, -84, -457, 79]
  56. [[317, [-116, -811, -27, -9], [91, -489, 546, -966, -84, -457, 79]], [317, [-116, -811, -27, -99], [1, -489, 546, -966, -84, -457, 79]]]

  57. [-380, 979, 233, -810, 322, -663, -152, -202, 732, -110]
  58. [[7, [-380, 979, 233, -810, 322, -6], [63, -152, -202, 732, -110]], [7, [-380, 979, 233, -810, 322, -66], [3, -152, -202, 732, -110]]]
复制代码

这些?
最佳答案
0 
发表于 2018-4-13 22:08:12 | 显示全部楼层
本帖最后由 柯基不是天然卷 于 2018-4-13 23:06 编辑

list = [1,122,-1233,-4124,512,-216,714,28,9]
list_a=[]
list_b=[]
answer_a=[]
answer_b=[]
answer1 = []
answer2 = []
last_answer1 = []
last_answer2 = []
def create_hanshu():
    for i in range(len(list)+1):
        list_a.append(list[:i])
        list_b.append(list[i:])
    list_a.pop(0)
    list_b.pop(-1)

def add_list():
    for i in list_a:
        answer1.append(sum(i))
    for i in list_b:
        answer2.append(sum(i))
def main():
    create_hanshu()
    add_list()
    last_answer1 = answer1[0]
    last_answer2 = answer2[0]
    biggest_answer = 0
    for i in range(1,len(answer1)):
        if abs(answer1+answer2) > abs(biggest_answer):
            biggest_answer = abs(answer1+answer2)
            last_answer1 = list_a
            last_answer2 = list_b
        print(last_answer1)
        print(last_answer2)

main()
最佳答案
0 
发表于 2018-4-13 22:09:23 | 显示全部楼层
  1. def split_num1(lstd):
  2.     a = b = c = 0
  3.     l = []
  4.     uu = []
  5.     SUM = sum(lstd)
  6.     count = 0
  7.    
  8.     for i in lstd[1: -1]:
  9.         a += i
  10.         b = SUM - a - a
  11.         c = abs(b)
  12.         l.append(c)

  13.     x = min(l)
  14.     #考虑是否有两个及两个以上分割点
  15.     for i in range(len(l)):
  16.         if l[i] == x:
  17.             count += 1
  18.             uu.append(i)
  19.     if count == 1:
  20.         return lstd[:l.index(x)+2], lstd[l.index(x)+2:]
  21.     else:
  22.         #考虑到有些列表的分割点可能会很多,如[-1,1,-1,1,-1,1,-1,1,-1,1,-1,1,-1],就不逐一返回了
  23.         print('分割点集合为:', uu)

  24.    
  25. lstd = [872, 4345, -729, 0, 9988, 123456, 7171, 44, -3]
  26. s1 = split_num1(lstd)[0]
  27. s2 = split_num1(lstd)[1]
复制代码
最佳答案
0 
发表于 2018-4-13 23:35:36 | 显示全部楼层
天圆突破 发表于 2018-4-13 21:59
好像都没考虑存在一个最小值多个分割方式的情况啊,例如:

这些?

只要能找到最小值,找到最小值一样的也不难了
最佳答案
5 
发表于 2018-4-14 00:27:35 | 显示全部楼层
  1. def depart(datalist):
  2.     if len(datalist) == 1 and abs(datalist[0]) < 10:
  3.         print("No solution!")
  4.         return
  5.     leftlist = []
  6.     sumleft = 0
  7.     sumright = sum(datalist)
  8.     minDiffer = abs(2 * datalist[0] - sumright)
  9.     minleftlist = [datalist[0]]
  10.     minrightlist = datalist[1:]
  11.     if minDiffer == 0:
  12.         print([datalist[0]], '\n', datalist[1:], '\n', "minDiffer is 0!")
  13.         return
  14.     for k in range(len(datalist[:])):
  15.         num = datalist.pop(0)
  16.         sumright -= num
  17.         if abs(num) >= 10:
  18.             j = 0 if num >= 0 else 1
  19.             for i in range(1 + j, len(str(num))):
  20.                 leftnum = int(str(num)[:i])
  21.                 sumleft += leftnum
  22.                 rightnum = int(str(num)[i:])
  23.                 sumright += rightnum
  24.                 if abs(sumleft - sumright) == 0:
  25.                     leftlist.append(leftnum)
  26.                     datalist.insert(0, rightnum)
  27.                     print(leftlist, '\n', datalist, '\n', "minDiffer is 0!")
  28.                     return
  29.                 elif abs(sumleft - sumright) < minDiffer:
  30.                     minDiffer = abs(sumleft - sumright)
  31.                     minleftlist = leftlist[:]
  32.                     minleftlist.append(leftnum)
  33.                     minrightlist = datalist[:]
  34.                     minrightlist.insert(0, rightnum)
  35.                 sumleft -= leftnum
  36.                 sumright -= rightnum
  37.             sumleft += num
  38.         else:
  39.             sumleft += num
  40.             if abs(sumleft - sumright) < minDiffer:
  41.                 minDiffer = abs(sumleft - sumright)
  42.                 minleftlist = leftlist[:] + [num]
  43.                 minrightlist = datalist[:]
  44.         leftlist.append(num)
  45.     print(minleftlist, '\n', minrightlist, '\n', "minDiffer is %d" % minDiffer)
  46.     return


  47. if __name__ == "__main__":
  48.     depart([872, 4345, -729, 0, 9988, 123456, 7171, 44, -3]
复制代码
最佳答案
0 
发表于 2018-4-14 14:49:06 | 显示全部楼层

多敲代码才是硬道理,,,,对
最佳答案
58 
发表于 2018-4-14 22:19:49 | 显示全部楼层
本帖最后由 凌九霄 于 2018-4-15 16:38 编辑
  1. import random

  2. absresult = 10000
  3. lsta = []
  4. lstb = []
  5. lst = random.sample([x for x in range(-3000, 10000)], 10)
  6. strnum = str(lst).replace('[', '').replace(']', '').replace(' ', '')

  7. for i in range(1, len(strnum)):
  8.     if strnum[i - 1] not in [',', '-']:

  9.         xlst = list(map(int, strnum[0:i].split(',')))
  10.         if strnum[i] != ',':
  11.             ylst = list(map(int, strnum[i:].split(',')))
  12.         else:
  13.             ylst = list(map(int, strnum[i + 1:].split(',')))

  14.         tmp = abs(sum(xlst) - sum(ylst))
  15.         if absresult > tmp:
  16.             absresult = tmp
  17.             lsta = xlst
  18.             lstb = ylst

  19. print('\n原列表:\n{0}\n\n按要求分割后的两个列表为:\n{1}\n{2}\n\n两个列表的和的差的最小绝对值为:{3}'.format(lst, lsta, lstb, absresult))
复制代码

360截图20180414221845248.jpg 360截图20180414221924389.jpg 360截图20180415163820530.jpg
最佳答案
0 
发表于 2018-4-15 23:32:23 | 显示全部楼层
本帖最后由 坑得飞起 于 2018-4-15 23:35 编辑

def bijiao(a,b):
    if a=='q' : return b
    if b=='q' : return a
    a2,b2=a,b
    if a<0 : a=-a
    if b<0 : b=-b
    if a<b :
        return a
    return b
ss=input()
an,ans1,ans2,ss='q',[],[],ss[1:len(ss)-1]
for i in range(len(ss)):
    if ss=='-' or ss==',' :
        continue
    s1=ss[:i+1].split(',')
    for j in range(len(s1)):
        s1[j]=int(s1[j])   
    s2=ss[i+1:].split(',')
    if s2[0]=='' :
        s2=s2[1:]
    for j in range(len(s2)):
        s2[j]=int(s2[j])
    if an!=bijiao(an,sum(s1)-sum(s2)):
        an,ans1,ans2=bijiao(an,sum(s1)-sum(s2)),s1,s2
print(an,',',ans1,',',ans2)
最佳答案
2 
发表于 2018-4-20 11:35:59 | 显示全部楼层
最近太忙了,一直没时间做题,今天抽点空,感觉自己写得好麻烦啊!有空了再优化吧……

  1. l1 = [872, 4345, -729, 0, 9988, 123456, 7171, 44, -3]

  2. tmp = []
  3. for i, each in enumerate(l1):
  4.     if i == 0:
  5.         front = []
  6.         back = l1[1:]
  7.     elif i == len(l1) - 1:
  8.         front = l1[:i]
  9.         back = []
  10.     else:
  11.         front = l1[:i]
  12.         back = l1[i + 1:]

  13.     x1 = str(each)
  14.     if x1[0] != '-':
  15.         for s in range(len(x1)):
  16.             if s != len(x1) - 1:
  17.                 sf = front + [int(x1[:s + 1])]
  18.                 sb = [int(x1[s + 1:])] + back
  19.             else:
  20.                 sf = front + [int(x1)]
  21.                 sb = back
  22.             tmp.append([abs(sum(sf) - sum(sb)), sf, sb])
  23.     else:
  24.         for s in range(1, len(x1)):
  25.             if s != len(x1) - 1:
  26.                 sf = front + [int(x1[:s + 1])]
  27.                 sb = [int(x1[s + 1:])] + back
  28.             else:
  29.                 sf = front + [int(x1)]
  30.                 sb = back
  31.             tmp.append([abs(sum(sf) - sum(sb)), sf, sb])


  32. m = min([sub[0] for sub in tmp])
  33. for i in tmp:
  34.     if i[0] == m:
  35.         print(i[1], i[2])
复制代码
最佳答案
5 
发表于 2018-4-24 22:26:51 | 显示全部楼层
python每日一题好几个星期没有更新了。大神。
*滑块验证:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

小甲鱼强烈推荐上一条 /1 下一条

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号 )

GMT+8, 2018-7-18 07:16

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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