Python:每日一题 152(悬赏篇)
本帖最后由 新手·ing 于 2018-2-12 07:39 编辑我们的玩法做了一下改变:
1. 增加悬赏机制,答对题目的前十位鱼油有资格参加悬赏竞争(我是穷人)代码简洁,运行效率高者获胜。
2. 请大家先独立思考,再参考其他鱼油的解答,这样才有助于自己编程水平的提高。
3. 鼓励大家积极答题,奖励的期限为出题后24小时内。
4. 根据答案的质量给予前十名鱼油5鱼币的奖励。
5. 当然我们的题目是面向新人出滴,也是想通过鱼币奖励给他们动力。
题目:
寻找平衡点:假如一个数组中的元素,其前面的部分等于后面的部分,那么这个点的位序就是平衡点,如果没有,就返回 None。
数组一定是由奇数个数字组成,所谓平衡点就是它前面的数字之和等于它后面的数字之和且数组不是顺序排列。
Test:
楼主会贴上自己的解答,一旦你回复的不是解题代码,将会被取消答题资格。
请慎重回复!
**** Hidden Message *****
本帖最后由 °蓝鲤歌蓝 于 2018-2-10 17:41 编辑
b = [,
,
,
,
[1, 2, 4, 34, 54, 27, 49, 14, 36, 25, 68, 13, 35, 78, 60, 25, 17, 5, 9, 23, 2, 1, 8, 1,
33, 26, 1, 9, 11, 5, 5, 253, 47, 65, 56, 10]
]
def CountNum(a):
num = for i in range(len(a)) if sum(a[:i]) == sum(a)]
if num:
return num
for a in b:
print(CountNum(a))
1.我不知道你要返回的是这个平衡点的位置还是元素,我就当是返回元素了。
2.因为你没说列表里是正数还是负数,所以一个列表可能不止一个平衡点,所以我返回的是一个列表。
3.我真的是新人{:10_316:} # nums =
# nums =
# nums =
# nums =
# nums =
nums =
def find_balance(args):
# total表示总数
# head表示平衡点之前的总数
# tail表示平衡点之后的总数
# length表示数组的总长
# 平衡点从第二个数开始,到倒数第二个数截止
# 如果找到平衡点,返回的是数组的下标 + 1
total = 0
for value in args:
total += value
head = args
tail = total - args - args
length = len(args)
balance_point = None
for i in range(1, length - 1):
if head == tail:
balance_point = i+1
break
head += args
tail -= args
return balance_point
print(find_balance(nums)) for count in range(len(a)):
if count > 0 and count < len(a)-1:
a1 = a[:count]
a2 = a
total1 = 0
total2 = 0
for each1 in a1:
total1+= each1
for each2 in a2:
total2 += each2
if total1 == total2:
print(a)
a 是 数组原谅我没写 函数 .......
新手·ing 发表于 2018-2-10 20:11
位置找得对,应该返回那个数字哦
那就加上数字咯
def f(L):
for i in range(1,len(L)-1):
if sum(L[:i]) == sum(L):
return '平衡点的位序是:%d,对应的数字是:%d' % (i, L)
qq=[,
,
,
,
]
for tt in qq:
b=0
for i in range(len(tt)):
if sum(tt[:i])== sum(tt):
print('%s的平衡点是第%d个元素%d'%(tt,i,tt))
b+=1
if b==0:
print('None')
qq= ,
,
.....手机懒得按了]
def pinh(a):
gg=len(a)-1
for i in range(gg):
if sum(a[:i+1])==sum(a):
return a
else:
if i==gg:
return None
else:
continue
map(pinh,qq)返回的是每个列表平衡点组成的列表
纯手机打的,思路是没问题的 numList = [,
,
,
,
]
for nums in numList:
num = for i in range(len(nums)) if sum(nums[:i]) == sum(nums)]
if num:
print(*num)
else:
print("None") ##手机写的,没有验证和别人的结果是否一样,有4个列表返回值是None。
a=[,
,
,
,
]
def getBalancePoint(aList):
length = len(aList)
if length//2==0:
return None
else:
sumAll = sum(aList)
for index in range(1, length-1):
sumLeft = sum(aList[:index])
sumRight = sumAll - sumLeft - aList
if sumLeft == sumRight:
return index
else:
return None
for i in a:
print(getBalancePoint(i))
#结果:
6
None
None
None
None
通过判断前i个元素的和与列表元素总和的关系来确定i是不是平衡点.
相对于对i左右的分片求和再比较的方法, 调用sum()的数量减少了一半左右.
应该会快一点吧.
另外参考了蓝鲤同学的回答, 输出的是列表.
def balance(list_in):
test = sum(list_in)
result = []
for i in range(len(list_in) - 1):
summa = sum(list_in[: i])
if summa < test / 2:
if summa + list_in > test / 2:
if summa == sum(list_in):
result.append(i)
return result
all_in = [,
,
,
,
]
for each in all_in:
print(balance(each))
def f(L):
for i in range(1,len(L)-1):
if sum(L[:i]) == sum(L):
return '平衡点的位序是:%d' % i 本帖最后由 新手·ing 于 2018-2-10 20:16 编辑
°蓝鲤歌蓝 发表于 2018-2-10 17:36
1.我不知道你要返回的是这个平衡点的位置还是元素,我就当是返回元素了。
2.因为你没说列表里是正数还是 ...
可以的大佬 楼组,你的遍历错了,应该是:
for i in range(1, len(lst)):
否则无法找到中的平衡点 °蓝鲤歌蓝 发表于 2018-2-10 17:36
1.我不知道你要返回的是这个平衡点的位置还是元素,我就当是返回元素了。
2.因为你没说列表里是正数还是 ...
没错没错,, snacke_hunter 发表于 2018-2-10 18:00
抱歉哦,错了 dunhee 发表于 2018-2-10 18:04
位置找得对,应该返回那个数字哦 snacke_hunter 发表于 2018-2-10 18:12
楼组,你的遍历错了,应该是:
否则无法找到中的平衡点
谢谢 地主家的小颖哥 发表于 2018-2-10 19:57
for count in range(len(a)):
if count > 0 and count < len(a)-1:
a1 = a[:count]
...
你这个,,
多返回了一个None shigure_takimi 发表于 2018-2-11 06:19
没问题,最好返回数字哦 ————————————————————十人已满——————————————————————
页:
[1]
2