鱼C论坛

 找回密码
 立即注册
12
返回列表 发新帖
楼主: 冬雪雪冬

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

[复制链接]
 楼主| 发表于 2018-12-9 19:02:43 | 显示全部楼层
fan1993423 发表于 2018-12-9 18:46
这个输入a=[4,7],显示的是[(2,9),(6,5)]但是答案是[(2,9),(8,3)]
@冬雪雪冬

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

使用道具 举报

发表于 2018-12-9 19:09:50 | 显示全部楼层
12楼[4,7],11楼[7,4],10楼[4,7],5楼[7,4]
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-12-9 19:16:15 | 显示全部楼层
我刚验证了一下7楼和8楼是对的,只是他们的答案不够完善,比如[7,4],他们显示的[(4, 7), (8, 3)],但是[(4,7),(10,1)]也可以,目前正在学习这两位大佬的代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-12-9 19:34:02 | 显示全部楼层
fan1993423 发表于 2018-12-9 19:16
我刚验证了一下7楼和8楼是对的,只是他们的答案不够完善,比如[7,4],他们显示的[(4, 7), (8, 3)],但是[(4, ...

你看的很仔细。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-12-9 20:22:40 | 显示全部楼层

主要这道题我没做全对,就想来看一下大佬的代码学习,但是一代入答案就错了,所以以后请冬雪大佬严格把关,因为你给3分我就默认为答案是对的。另外这道题冬雪大佬有没有好的解法
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-12-9 22:24:49 | 显示全部楼层
fan1993423 发表于 2018-12-9 20:22
主要这道题我没做全对,就想来看一下大佬的代码学习,但是一代入答案就错了,所以以后请冬雪大佬严格把关 ...

我的解法。
  1. def fun217(lst):
  2.     sum1 = sum(lst)
  3.     result = []
  4.     for i in range(len(lst)):
  5.         n = lst[i] // 2
  6.         left = sum(lst[:i]) + n
  7.         if left % 2:
  8.             left += 1
  9.         result.append((left, sum1 - left))
  10.     return result
复制代码

评分

参与人数 1荣誉 +1 鱼币 +1 收起 理由
xy123151 + 1 + 1 这题你题目没讲清楚,我运算了你的代码才看.

查看全部评分

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

使用道具 举报

 楼主| 发表于 2018-12-9 22:28:18 | 显示全部楼层
fan1993423 发表于 2018-12-9 20:22
主要这道题我没做全对,就想来看一下大佬的代码学习,但是一代入答案就错了,所以以后请冬雪大佬严格把关 ...

的确没有把每个人的程序都仔细看一遍,只是用几组数据验算了,应该更认真些。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-12-9 22:36:08 | 显示全部楼层
def fun(a):
    x,y=a
    x1,y1=x//2,y//2
    x2,y2=x-x1,y-y1
    if x1%2:
        x1,x2=x2,x1
    if (x+y1)%2:
       y1,y2=y2,y1
    return [(x1,x2+y),(x+y1,y2)]
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-12-10 00:22:28 | 显示全部楼层

验证无误,冬雪大佬就是牛,代码简洁完成了目标,希望冬雪大佬多出一些像这样优秀的题目,另外冬雪大佬可不可以在公布答案后,把自己的解法也顺带公布一下。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-12-10 08:07:16 | 显示全部楼层
fan1993423 发表于 2018-12-10 00:22
验证无误,冬雪大佬就是牛,代码简洁完成了目标,希望冬雪大佬多出一些像这样优秀的题目,另外冬雪大佬可 ...

好的,如果与大家的解法有所差别,就把我的解法也跟帖公布。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-12-10 15:03:40 | 显示全部楼层
fan1993423 发表于 2018-12-9 18:46
这个输入a=[4,7],显示的是[(2,9),(6,5)]但是答案是[(2,9),(8,3)]
@冬雪雪冬

按题意,当首项为奇数是结果不唯一。[(2,9),(6,5)],[(2,9),(8,3)]都是符合要求的。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-12-10 19:54:24 | 显示全部楼层
grf1973 发表于 2018-12-10 15:03
按题意,当首项为奇数是结果不唯一。[(2,9),(6,5)],[(2,9),(8,3)]都是符合要求的。

题目有这句话 2. 需平分的数如果是奇数,则分为最接近的两个数,如5可以分为2和3或者3和2.
第二个数7的话一半是3.5,接近的整数是3或者4,但是前面第一个数4,又元组第一个数必须是偶数,所以只能分4给第一个整数,也就是4+4=8,第二个数是3
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-12-11 14:08:30 | 显示全部楼层
没仔细看题,重新做了一遍。

  1. def is_even(d):
  2.     return 0 if d % 2 else 1


  3. def fun217(pl):
  4.     pl, ar1 = [0] + pl + [0], []
  5.     for i in range(1, len(pl)-1):
  6.         p0 = pl[i] // 2
  7.         f = -1 if is_even(pl[i]) else 1
  8.         if is_even(pl[i - 1]):
  9.             ar1.append((p0, pl[i] - p0) if is_even(p0) else (p0 + f, pl[i] - (p0 + f)))
  10.         else:
  11.             ar1.append((p0 + f, pl[i] - (p0 + f)) if is_even(p0) else (p0, pl[i] - p0))

  12.     ar2 = [(ar1[i][0]+pl[i], ar1[i][1]+pl[i+2]) for i in range(0, len(ar1))]
  13.     return ar2


  14. print(fun217([4, 6, 9, -8, 3, 7]))
复制代码


结果:[(2, 8), (6, 13), (10, -3), (4, 0), (-6, 8), (6, 4)]


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

使用道具 举报

发表于 2018-12-11 14:22:14 | 显示全部楼层

楼主,当列表中有元素为负时,感觉按你的代码,结果好像不正确。
比如:[9, -13, 8]   
按我的理解,应该分为[(4, 5), (-7, -6), (3, 5)] ---> [(4, -8), (2, 2), (-10, 5)]
按你的代码结果是:[(4, 0), (2, 2), (0, 4)],你看看是不是我哪里理解的不对?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-12-12 10:38:19 | 显示全部楼层
graceasyi 发表于 2018-12-11 14:22
楼主,当列表中有元素为负时,感觉按你的代码,结果好像不正确。
比如:[9, -13, 8]   
按我的理解, ...

第二个数分解为-7和-6,-7与前面的9相加为2,-6与后面的8相加为2
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-12-12 13:40:10 | 显示全部楼层
冬雪雪冬 发表于 2018-12-12 10:38
第二个数分解为-7和-6,-7与前面的9相加为2,-6与后面的8相加为2

恩,第二个元素是对的,但9应该分解为4和5,相加应该是(4, -8),按你的代码,是(4,0)
8分解为3和5,相加应该是(10,5),按你的代码,是(0,4)。是这样的吧?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-12-21 11:19:24 | 显示全部楼层
def fun217(*args):
    a=args[0]
    b=[]
    for i in range(len(a)):
        if i == 0:
            if a[i]%2==0:
                if a[i]%4==0:
                    b.append((a[i]/2+0,a[i+1]+a[i]/2))
                else:
                    b.append((a[i]//2+1 + 0, a[i+1]  +  a[i]//2-1))
                    b.append((a[i]//2-1 + 0, a[i+1] +  a[i]//2 + 1))
            else:
                b.append((a[i] // 2 + 1 + 0, a[i + 1] + a[i] // 2 ))
                b.append((a[i] // 2 + 0, a[i + 1] + a[i] // 2+ 1))
        elif i == len(a)-1:
            if a[i]%2==0:
                if a[i]%4==0:
                    b.append((a[i]//2+a[i-1],0+a[i]//2))
                else:
                    b.append((a[i]//2+1+a[i-1],0+a[i]//2-1))
                    b.append((a[i] // 2 - 1 + a[i-1], 0 + a[i] // 2 + 1))
            else:
                b.append((a[i] // 2 + 1 + a[i-1], 0 + a[i] // 2 ))
                b.append((a[i] // 2 + a[i-1], 0 + a[i] // 2+ 1))

        else:
            if a[i]%2==0:
                if a[i]%4==0:
                    b.append((a[i]//2+a[i-1],a[i+1]+a[i]//2))
                else:
                    b.append((a[i]//2+1+a[i-1],a[i+1]+a[i]//2-1))
                    b.append((a[i] // 2 - 1 + a[i-1], a[i+1] + a[i] // 2 + 1))
            else:
                print(i)
                b.append((a[i] // 2 + 1 + a[i-1], a[i+1] + a[i] // 2 ))
                b.append((a[i] // 2 + a[i-1], a[i+1] + a[i] // 2+ 1))
    return list(set(b))


print(fun217([2,6]))
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-12-27 13:17:54 | 显示全部楼层
def Listtotup(a):
    b=[]
    b1=[]
    b2=[]
    if a[0]%2==0:
        if a[0]/2%2==0:
            b1.append(a[0]/2)
            b1.append(a[0]/2+a[1])
        else:
            b1.append(a[0]/2-1)
            b1.append(a[0]/2+1+a[1])
    else:
        if (a[0]-1)/2%2==0:
            b1.append((a[0]-1)/2)
            b1.append((a[0]+1)/2+a[1])
        else:
            b1.append((a[0]-1)/2-1)
            b1.append((a[0]+1)/2+a[1]+1)
        

    print(tuple(b1))
    b.append(tuple(b1))



    if a[1]%2==0:
        if (a[1]/2+a[0])%2==0:
            b2.append(a[1]/2+a[0])
            b2.append(a[1]/2)
        else:
            b2.append(a[1]/2-1+a[0])
            b2.append(a[1]/2+1)
    else:
        if ((a[1]-1)/2+a[0])%2==0:
            b2.append((a[1]-1)/2+a[0])
            b2.append((a[1]+1)/2)
        else:
            b2.append((a[1]-1)/2+a[0]-1)
            b2.append((a[1]-1)/2+1)
      
    print(b2)
    b.append(tuple(b2))

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

使用道具 举报

发表于 2018-12-29 17:01:14 | 显示全部楼层
自己写了一下这个题目,练练手,先发出来,然后在学习各位鱼油的程序~~
我的程序如下
  1. def changelist(list1):
  2.         list2=[]
  3.         if len(list1)<1:
  4.                 return list2
  5.         elif len(list1)==1:
  6.                 a=list1[0]//2 if (list1[0]//2)%2==0 else list1[0]//2-1
  7.                 b=list1[0]-a
  8.                 list2.append((a,b))
  9.                 return list2
  10.         for i in range(len(list1)):
  11.                 if i==0:
  12.                         a=list1[i]//2 if (list1[i]//2)%2==0 else list1[i]//2-1
  13.                         b=list1[i]-a+list1[i+1]
  14.                         list2.append((a,b))
  15.                 elif i==len(list1)-2:
  16.                         a=list1[i]//2+list1[i-1] if (list1[i]//2+list1[i-1])%2==0 else list1[i]//2+list1[i-1]-1
  17.                         b=list1[i]-a+list1[i-1]+list1[i+1]
  18.                         list2.append((a,b))
  19.                 else:
  20.                         a=list1[i]//2+list1[i-1] if (list1[i]//2+list1[i-1])%2==0 else list1[i]//2+list1[i-1]-1
  21.                         b=list1[i]-a+list1[i-1]
  22.                         list2.append((a,b))
  23.         return list2

  24. print([],'转换为',changelist([]))
  25. print([3],'转换为',changelist([3]))
  26. print([5,8],'转换为',changelist([5,8]))
  27. print([-3,6,-8],'转换为',changelist([-3,6,-8]))
复制代码

程序结果
  1. [] 转换为 []
  2. [3] 转换为 [(0, 3)]
  3. [5, 8] 转换为 [(2, 11), (8, 5)]
  4. [-3, 6, -8] 转换为 [(-2, 5), (0, -5), (2, -4)]
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-12-19 16:39:40 | 显示全部楼层
本帖最后由 kinkon 于 2019-12-19 23:08 编辑

def f217(a):
    b = []
    l = len(a)
    for i in range(l):
        if a%2 == 0:
            if i == 0:              
                b.append((a//2, a//2+a[i+1]))
                i += 1
            elif 0 < i < l-1:
                b.append((a//2+a[i-1], a//2+a[i+1]))
                i += 1
            else:
                b.append((a//2+a[i-1], a//2))
                i += 1
        else:
            if i == 0:
                b.append((a//2, a//2+1+a[i+1]))
                i += 1
            elif 0 < i < l-1:
                b.append((a//2+a[i-1], a//2+1+a[i+1]))
                i += 1
            else:
                b.append((a//2+a[i-1], a//2+1))
                i += 1
        
    return b
print(f217([43,110,131]))
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-29 01:01

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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