鱼C论坛

 找回密码
 立即注册
查看: 3937|回复: 33

[已解决]Python:每日一题 152(悬赏篇)

[复制链接]
发表于 2018-2-10 16:56:01 | 显示全部楼层 |阅读模式
20鱼币
本帖最后由 新手·ing 于 2018-2-12 07:39 编辑

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

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

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


Test:
[1, 3, 5, 7, 8, 25, 4, 20, 29]
[6, 5, 7, 9, 0, 5, 43, 2, 17, 13, 16]
[2, 31, 43, 234, 0, 10, 15, 310, 37, 43, 21]
[1, 3, 2, 546, 123, 546, 98, 543, 22, 424, 56, 23, 199, 934, 4]
[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]

楼主会贴上自己的解答,一旦你回复的不是解题代码,将会被取消答题资格。
请慎重回复!
游客,如果您要查看本帖隐藏内容请回复


最佳答案
2018-2-10 16:56:02
本帖最后由 °蓝鲤歌蓝 于 2018-2-10 17:41 编辑
b = [[1, 3, 5, 7, 8, 25, 4, 20, 29],
[6, 5, 7, 9, 0, 5, 43, 2, 17, 13, 16],
[2, 31, 43, 234, 0, 10, 15, 310, 37, 43, 21],
[1, 3, 2, 546, 123, 546, 98, 543, 22, 424, 56, 23, 199, 934, 4],
[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 = [a[i] for i in range(len(a)) if sum(a[:i]) == sum(a[i+1:])]
    if num:
        return num
    
for a in b:
    print(CountNum(a))
1.我不知道你要返回的是这个平衡点的位置还是元素,我就当是返回元素了。
2.因为你没说列表里是正数还是负数,所以一个列表可能不止一个平衡点,所以我返回的是一个列表。
3.我真的是新人

最佳答案

查看完整内容

1.我不知道你要返回的是这个平衡点的位置还是元素,我就当是返回元素了。 2.因为你没说列表里是正数还是负数,所以一个列表可能不止一个平衡点,所以我返回的是一个列表。 3.我真的是新人

本帖被以下淘专辑推荐:

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

使用道具 举报

发表于 2018-2-10 16:56:02 | 显示全部楼层    本楼为最佳答案   
本帖最后由 °蓝鲤歌蓝 于 2018-2-10 17:41 编辑
b = [[1, 3, 5, 7, 8, 25, 4, 20, 29],
[6, 5, 7, 9, 0, 5, 43, 2, 17, 13, 16],
[2, 31, 43, 234, 0, 10, 15, 310, 37, 43, 21],
[1, 3, 2, 546, 123, 546, 98, 543, 22, 424, 56, 23, 199, 934, 4],
[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 = [a[i] for i in range(len(a)) if sum(a[:i]) == sum(a[i+1:])]
    if num:
        return num
    
for a in b:
    print(CountNum(a))
1.我不知道你要返回的是这个平衡点的位置还是元素,我就当是返回元素了。
2.因为你没说列表里是正数还是负数,所以一个列表可能不止一个平衡点,所以我返回的是一个列表。
3.我真的是新人

评分

参与人数 2荣誉 +10 鱼币 +10 收起 理由
ofey404 + 5 + 5 思维缜密, 给了我很大的帮助
新手·ing + 5 + 5 绝对是大佬,去去去

查看全部评分

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

使用道具 举报

发表于 2018-2-10 18:00:17 | 显示全部楼层
# nums = [1, 2, 3, 4, 5, 4, 3, 2, 1]
# nums = [1, 2, 1]
# nums = [1, 3, 5, 7, 8, 25, 4, 20, 29]
# nums = [1, 3, 2, 546, 123, 546, 98, 543, 22, 424, 56, 23, 199, 934, 4]
# nums = [2, 31, 43, 234, 0, 10, 15, 310, 37, 43, 21]
nums = [1, 2, 3, 4, 6]


def find_balance(args):
    # total表示总数
    # head表示平衡点之前的总数
    # tail表示平衡点之后的总数
    # length表示数组的总长
    # 平衡点从第二个数开始,到倒数第二个数截止
    # 如果找到平衡点,返回的是数组的下标 + 1
    total = 0
    for value in args:
        total += value

    head = args[0]
    tail = total - args[0] - args[1]
    length = len(args)
    balance_point = None
    for i in range(1, length - 1):
        if head == tail:
            balance_point = i+1
            break
        head += args[i]
        tail -= args[i + 1]
    return balance_point


print(find_balance(nums))

评分

参与人数 1荣誉 +5 鱼币 +5 收起 理由
新手·ing + 5 + 5 答题奖励

查看全部评分

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

使用道具 举报

发表于 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[count+1:]
            total1 = 0
            total2 = 0
            for each1 in a1:
                total1+= each1
            for each2 in a2:
                total2 += each2
            if total1 == total2:
                print(a[count])
a 是 数组  原谅我没写 函数 .......

评分

参与人数 1荣誉 +5 鱼币 +5 收起 理由
冬雪雪冬 + 5 + 5

查看全部评分

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

使用道具 举报

发表于 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[i+1:]):
            return '平衡点的位序是:%d,对应的数字是:%d' % (i, L[i])

评分

参与人数 1荣誉 +5 鱼币 +5 收起 理由
冬雪雪冬 + 5 + 5

查看全部评分

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

使用道具 举报

发表于 2018-2-10 22:22:20 | 显示全部楼层
qq=[[1, 3, 5, 7, 8, 25, 4, 20, 29],
[6, 5, 7, 9, 0, 5, 43, 2, 17, 13, 16],
[2, 31, 43, 234, 0, 10, 15, 310, 37, 43, 21],
[1, 3, 2, 546, 123, 546, 98, 543, 22, 424, 56, 23, 199, 934, 4],
[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]]

for tt in qq:
    b=0
    for i in range(len(tt)):
        if sum(tt[:i])== sum(tt[i+1:]):
            print('%s的平衡点是第%d个元素%d'%(tt,i,tt[i]))
            b+=1
    if b==0:
        print('None')

评分

参与人数 1荣誉 +5 鱼币 +5 收起 理由
冬雪雪冬 + 5 + 5

查看全部评分

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

使用道具 举报

发表于 2018-2-10 23:18:31 From FishC Mobile | 显示全部楼层
qq= [1, 3, 5, 7, 8, 25, 4, 20, 29],
        [6, 5, 7, 9, 0, 5, 43, 2, 17, 13, 16],
.....手机懒得按了]
def pinh(a):
       gg=len(a)-1
      for i in range(gg):
            if sum(a[:i+1])==sum(a[i+2:]):
                return a[i+1]
            else:
                if i==gg:
                   return None
                else:
                   continue
map(pinh,qq)返回的是每个列表平衡点组成的列表

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

评分

参与人数 1荣誉 +5 鱼币 +5 收起 理由
冬雪雪冬 + 5 + 5

查看全部评分

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

使用道具 举报

发表于 2018-2-11 00:41:55 | 显示全部楼层
numList = [[1, 3, 5, 7, 8, 25, 4, 20, 29],
[6, 5, 7, 9, 0, 5, 43, 2, 17, 13, 16],
[2, 31, 43, 234, 0, 10, 15, 310, 37, 43, 21],
[1, 3, 2, 546, 123, 546, 98, 543, 22, 424, 56, 23, 199, 934, 4],
[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]]

for nums in numList:
    num = [nums[i] for i in range(len(nums)) if sum(nums[:i]) == sum(nums[i+1:])]
    if num:
        print(*num)
    else:
        print("None")

评分

参与人数 1荣誉 +5 鱼币 +5 收起 理由
冬雪雪冬 + 5 + 5

查看全部评分

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

使用道具 举报

发表于 2018-2-11 06:19:27 From FishC Mobile | 显示全部楼层
##  手机写的,没有验证和别人的结果是否一样,有4个列表返回值是None。

a=[[1, 3, 5, 7, 8, 25, 4, 20, 29],
[6, 5, 7, 9, 0, 5, 43, 2, 17, 13, 16],
[2, 31, 43, 234, 0, 10, 15, 310, 37, 43, 21],
[1, 3, 2, 546, 123, 546, 98, 543, 22, 424, 56, 23, 199, 934, 4],
[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 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[index]
                        if sumLeft == sumRight:
                                return index
                else:
                        return None
                
for i in a:
        print(getBalancePoint(i))

#  结果:
6
None
None
None
None

评分

参与人数 1荣誉 +5 鱼币 +5 收起 理由
冬雪雪冬 + 5 + 5

查看全部评分

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

使用道具 举报

发表于 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[i + 1] > test / 2:
                if summa == sum(list_in[i + 1:]):
                    result.append(i)
    return result

all_in = [[1, 3, 5, 7, 8, 25, 4, 20, 29],
[6, 5, 7, 9, 0, 5, 43, 2, 17, 13, 16],
[2, 31, 43, 234, 0, 10, 15, 310, 37, 43, 21],
[1, 3, 2, 546, 123, 546, 98, 543, 22, 424, 56, 23, 199, 934, 4],
[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]]

for each in all_in:
    print(balance(each))

评分

参与人数 1荣誉 +5 鱼币 +5 收起 理由
冬雪雪冬 + 5 + 5

查看全部评分

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

使用道具 举报

发表于 2018-2-10 18:04:15 | 显示全部楼层
def f(L):
    for i in range(1,len(L)-1):
        if sum(L[:i]) == sum(L[i+1:]):
            return '平衡点的位序是:%d' % i
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2018-2-10 18:06:57 | 显示全部楼层
本帖最后由 新手·ing 于 2018-2-10 20:16 编辑
°蓝鲤歌蓝 发表于 2018-2-10 17:36
1.我不知道你要返回的是这个平衡点的位置还是元素,我就当是返回元素了。
2.因为你没说列表里是正数还是 ...


可以的大佬
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-2-10 18:12:20 | 显示全部楼层
楼组,你的遍历错了,应该是:
for i in range(1, len(lst)):
否则无法找到[1, 2, 1]中的平衡点
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

没错没错,,
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2018-2-10 20:10:15 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2018-2-10 20:11:14 | 显示全部楼层

位置找得对,应该返回那个数字哦
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2018-2-10 20:11:47 | 显示全部楼层
snacke_hunter 发表于 2018-2-10 18:12
楼组,你的遍历错了,应该是:

否则无法找到[1, 2, 1]中的平衡点

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

使用道具 举报

 楼主| 发表于 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
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2018-2-11 07:11:24 | 显示全部楼层

没问题,最好返回数字哦
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2018-2-11 11:18:13 | 显示全部楼层
————————————————————十人已满——————————————————————
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-24 03:31

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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