新手·ing 发表于 2018-2-10 16:56:01

Python:每日一题 152(悬赏篇)

本帖最后由 新手·ing 于 2018-2-12 07:39 编辑

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

1. 增加悬赏机制,答对题目的前十位鱼油有资格参加悬赏竞争(我是穷人)代码简洁,运行效率高者获胜。
2. 请大家先独立思考,再参考其他鱼油的解答,这样才有助于自己编程水平的提高。
3. 鼓励大家积极答题,奖励的期限为出题后24小时内。
4. 根据答案的质量给予前十名鱼油5鱼币的奖励。
5. 当然我们的题目是面向新人出滴,也是想通过鱼币奖励给他们动力。

题目:
寻找平衡点:假如一个数组中的元素,其前面的部分等于后面的部分,那么这个点的位序就是平衡点,如果没有,就返回 None。
数组一定是由奇数个数字组成,所谓平衡点就是它前面的数字之和等于它后面的数字之和且数组不是顺序排列。


Test:






楼主会贴上自己的解答,一旦你回复的不是解题代码,将会被取消答题资格。
请慎重回复!
**** Hidden Message *****

°蓝鲤歌蓝 发表于 2018-2-10 16:56:02

本帖最后由 °蓝鲤歌蓝 于 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:}

snacke_hunter 发表于 2018-2-10 18:00:17

# 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))

地主家的小颖哥 发表于 2018-2-10 19:57:33

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 是 数组原谅我没写 函数 .......

dunhee 发表于 2018-2-10 21:05:45

新手·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)

冰封雪舞 发表于 2018-2-10 22:22:20

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')

waitforlove 发表于 2018-2-10 23:18:31

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)返回的是每个列表平衡点组成的列表

纯手机打的,思路是没问题的

被翻红浪 发表于 2018-2-11 00:41:55

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")

shigure_takimi 发表于 2018-2-11 06:19:27

##手机写的,没有验证和别人的结果是否一样,有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

ofey404 发表于 2018-2-11 10:21:10

通过判断前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))

dunhee 发表于 2018-2-10 18:04:15

def f(L):
    for i in range(1,len(L)-1):
      if sum(L[:i]) == sum(L):
            return '平衡点的位序是:%d' % i

新手·ing 发表于 2018-2-10 18:06:57

本帖最后由 新手·ing 于 2018-2-10 20:16 编辑

°蓝鲤歌蓝 发表于 2018-2-10 17:36
1.我不知道你要返回的是这个平衡点的位置还是元素,我就当是返回元素了。
2.因为你没说列表里是正数还是 ...

可以的大佬

snacke_hunter 发表于 2018-2-10 18:12:20

楼组,你的遍历错了,应该是:
for i in range(1, len(lst)):
否则无法找到中的平衡点

新手·ing 发表于 2018-2-10 20:06:19

°蓝鲤歌蓝 发表于 2018-2-10 17:36
1.我不知道你要返回的是这个平衡点的位置还是元素,我就当是返回元素了。
2.因为你没说列表里是正数还是 ...

没错没错,,

新手·ing 发表于 2018-2-10 20:10:15

snacke_hunter 发表于 2018-2-10 18:00


抱歉哦,错了

新手·ing 发表于 2018-2-10 20:11:14

dunhee 发表于 2018-2-10 18:04


位置找得对,应该返回那个数字哦

新手·ing 发表于 2018-2-10 20:11:47

snacke_hunter 发表于 2018-2-10 18:12
楼组,你的遍历错了,应该是:

否则无法找到中的平衡点

谢谢

新手·ing 发表于 2018-2-10 20:13:27

地主家的小颖哥 发表于 2018-2-10 19:57
for count in range(len(a)):
      if count > 0 and count < len(a)-1:
            a1 = a[:count]
...

你这个,,
多返回了一个None

新手·ing 发表于 2018-2-11 07:11:24

shigure_takimi 发表于 2018-2-11 06:19


没问题,最好返回数字哦

新手·ing 发表于 2018-2-11 11:18:13

————————————————————十人已满——————————————————————
页: [1] 2
查看完整版本: Python:每日一题 152(悬赏篇)