鱼C论坛

 找回密码
 立即注册
查看: 9534|回复: 51

[已解决]Python:每日一题 278

[复制链接]
发表于 2019-11-20 21:00:00 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

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

x
本帖最后由 zltzlt 于 2019-11-20 21:00 编辑

今天的题目:


给定一个整数数组,返回它们的总和。但 13 是个不幸运的数字。如果整数数组中出现 13,13 以及它后面的 5 个数字都不计入总和

说明:13 后面的 5 个数字不包含 13。

示例 1:

输入:[1, 2, 2]
输出:5
示例 2:

输入:[1, 2, 13, 5, 4, 3, 4, 5, 6]
输出:9
解释:13 以及后面的 5 个数字 5, 4, 3, 4, 5 都不计入总和。
示例 3:

输入:[5, 13, 7]
输出:5


欢迎大家一起答题!
最佳答案
2019-11-21 11:18:15
  1. def f278(nums:List[int])->int:
  2.     n = len(nums)
  3.     i, s = 0, 0
  4.     while i < n:
  5.         if nums[i] == 13:
  6.             i += 6
  7.             continue
  8.         s += nums[i]
  9.         i += 1
  10.     return s
复制代码


代码撞了,我换个写法
  1. def f278(nums:List[int])->int:
  2.     n = len(nums)
  3.     i, t, s = 0, -6, 0
  4.     while i < n:
  5.         try:
  6.             t = nums.index(13, t+6)
  7.             s += sum(nums[i:t])
  8.             i = t + 6
  9.         except ValueError:
  10.             return s + sum(nums[i:])
  11.     return s
复制代码

本帖被以下淘专辑推荐:

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2019-11-20 21:16:50 | 显示全部楼层
  1. def solve(nums):
  2.     i = 0
  3.     while True:
  4.         try:
  5.             if nums[i] == 13:
  6.                 for j in range(6):
  7.                     nums[i+j] = 0
  8.                 i += 5
  9.             i += 1
  10.         except IndexError:
  11.             break
  12.     return sum(nums)
复制代码

评分

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

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-11-20 21:39:52 | 显示全部楼层
  1. def fun(lst):
  2.     sum1 = 0
  3.     i = 0
  4.     while i < len(lst):
  5.         if lst[i] == 13:
  6.             i += 6
  7.         else:
  8.             sum1 += lst[i]
  9.             i += 1
  10.     return sum1
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-11-20 21:40:53 | 显示全部楼层
  1. def f(x):
  2.     res=0
  3.     flag=0
  4.     for e in x:
  5.         if e==13:
  6.             flag=5
  7.         else:
  8.             if flag:
  9.                 flag-=1
  10.             else:
  11.                 res+=e            
  12.     return res
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-11-20 21:48:12 | 显示全部楼层

恭喜通过!

执行用时:136 ms
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-11-20 21:48:35 | 显示全部楼层

恭喜通过!

执行用时:328 ms
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-11-20 21:48:58 | 显示全部楼层

恭喜通过!

执行用时:106 ms
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-11-20 21:53:30 | 显示全部楼层
本帖最后由 阴阳神万物主 于 2019-11-20 22:00 编辑

我来凑个热闹~~~
  1. def solve(nums):
  2.     unlucky = 0
  3.     res = 0
  4.     for each in nums:
  5.         if each == 13:
  6.             unlucky = 5
  7.             continue
  8.         elif unlucky:
  9.             unlucky -= 1
  10.             continue
  11.         else:
  12.             res += each
  13.     return res

  14. if __name__ == '__main__':
  15.     print('示例1 5 输出:',solve([1,2,2]))
  16.     print('示例2 9 输出:',solve([1,2,13,5,4,3,4,5,6]))
  17.     print('示例3 5 输出:',solve([5,13,7]))
复制代码

再来一个,感觉比上一个要快
  1. def solve(nums):
  2. #def solve_2(nums):
  3.     i = 0
  4.     res = 0
  5.     while i < len(nums):
  6.         if nums[i] == 13:
  7.             i += 5
  8.         else:
  9.             res += nums[i]
  10.         i += 1
  11.     return res
复制代码


评分

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

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-11-20 21:54:24 | 显示全部楼层
本帖最后由 __mrsq__ 于 2019-11-20 21:58 编辑

我瞎了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-11-20 21:55:36 | 显示全部楼层
  1. def solve(list1):
  2.     result = 0
  3.     count = 0
  4.     while count < len(list1):
  5.         if list1[count] != 13:
  6.             result += list1[count]
  7.             count += 1
  8.         else:
  9.             if count + 5 < len(list1):
  10.                 count += 6
  11.             else:
  12.                 count = len(list1)
  13.     return result
复制代码

评分

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

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-11-20 21:57:41 | 显示全部楼层
__mrsq__ 发表于 2019-11-20 21:54
[1, 2, 13, 13 ,5, 4, 3, 4, 5, 6]这种情况?

13 后面的 5 个数字不包含 13。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-11-20 22:51:18 | 显示全部楼层
ef app(list):
    sum=0
    i=0
    while True:
        try:
            if list[i] != 13:
                sum+=list[i]
                i+=1
            else:
                i+=6
                if list[i] !=13:
                    sum+=list[i]
                    i+=1
        except:
            print(sum)
            break

评分

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

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-11-20 22:51:39 | 显示全部楼层
def check_sum(list1):
     bad_num = 13
     head = 0
     sum_good = 0
     while True:
          if head == len(list1):
               break
          if list1[head] == bad_num:
               if len(list1[head+1:]) >= 5:   
                    head += 6
               else:
                    break
          else:
               if head <= len(list1)-1:
                    sum_good += list1[head]
                    head += 1  
               else:
                    break

     return sum_good


if __name__ == '__main__':
     list1 = [1,2,13,5,4,3,4,5,6]
     print(check_sum(list1))

评分

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

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-11-20 23:09:23 | 显示全部楼层
本帖最后由 angtn 于 2019-11-20 23:49 编辑

过来学习一下。
  1. def echo(ls):
  2.         for i in ls:
  3.                 if i == 13:
  4.                         del ls[ls.index(13):ls.index(13)+6]
  5.         return sum(ls)
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-11-20 23:39:23 | 显示全部楼层
  1. def solve(ls):
  2.     while 13 in ls:
  3.         idx = ls.index(13)
  4.         del ls[idx: idx + 6]
  5.     return sum(ls)
复制代码

评分

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

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-11-20 23:55:06 | 显示全部楼层
  1. def fun278(nums:list):
  2.     flag = 0
  3.     result = 0
  4.     for each in nums:
  5.         if each == 13:
  6.             flag = 5
  7.             continue
  8.         if flag:
  9.             flag -=1
  10.             continue
  11.         result += each
  12.     return result
复制代码

评分

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

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-11-21 00:18:18 | 显示全部楼层
  1. def f(x,y=13):
  2.         n=len(x)
  3.         lst=[]
  4.         if y not in x:
  5.                 return sum(x)
  6.         else:
  7.                 while y in x:
  8.                         n=x.index(y)
  9.                         lst.append(x[:n])
  10.                         x=x[n+1:]
  11.                 lst.append(x)
  12.                 lst1=lst[0]
  13.                 lst2=lst[1:]
  14.                 s=sum(lst1)
  15.                 for i in lst2:
  16.                         if len(i)>5:
  17.                                 s+=sum(i[5:])
  18.         return s
  19. a=[1,2,2]
  20. b=[1, 2, 13, 5, 4, 3, 4, 5, 6]
  21. c=[5,13,7]
  22. print(f(a))
  23. print(f(b))
  24. print(f(c))
复制代码

评分

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

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-11-21 00:50:26 | 显示全部楼层
本帖最后由 Python3005 于 2019-11-21 04:32 编辑
  1. def fun(lst):
  2.         if 13 not in lst:
  3.                 print(sum(lst))
  4.         else:
  5.                 del lst[lst.index(13):lst.index(13)+6]
  6.                 fun(lst)
复制代码

评分

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

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-11-21 09:49:29 | 显示全部楼层

  1. def f278(a):
  2.     while 13 in a:
  3.         loc=a.index(13)
  4.         if loc==len(a)-1:
  5.             del a[loc]
  6.         else:
  7.             b=a[loc+1:min(loc+6,len(a))]
  8.             if 13 not in b:
  9.                 del a[loc:min(loc+6,len(a))]
  10.             else:
  11.                 del a[loc:a.index(13,loc+1)]
  12.     return sum(a)
复制代码

评分

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

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-11-21 10:04:52 | 显示全部楼层
  1. def fun278(nums):
  2.     sums=sum(nums)
  3.     index=0
  4.     while True:
  5.         try:
  6.             index=nums.index(13,index)
  7.             if index+6<=len(nums):
  8.                 sums-=sum(nums[index:index+6])
  9.                 index+=1
  10.             else:
  11.                 sums -= sum(nums[index:])
  12.                 break
  13.         except ValueError:
  14.             break
  15.     return sums
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-7-3 14:31

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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