鱼C论坛

 找回密码
 立即注册
查看: 12650|回复: 71

[技术交流] Python:每日一题 31(答题领鱼币)

[复制链接]
发表于 2017-4-19 18:51:18 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 新手·ing 于 2017-4-19 19:58 编辑

今日群里面一个朋友问的一个题目,不过他本身题目有点缺陷,我给修改了一下,给大家娱乐娱乐。

求:1+2*3+4*5*6+7*8*9*10+11*12*13*14*15+……+(n-k)*...*(n-1)*n的和。
说明:第k个加法项,就有n个数相乘,如果最后一项不足,有几项相乘几项。
例如:n=13时,则求1+2*3+4*5*6+7*8*9*10+11*12*13
          n=16时,则求1+2*3+4*5*6+7*8*9*10+11*12*13*14*15+16


下面是我的渣代码,也不知道自己求的对不对啊!
游客,如果您要查看本帖隐藏内容请回复

本帖被以下淘专辑推荐:

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

使用道具 举报

发表于 2017-4-19 19:57:34 | 显示全部楼层
不是伪!我让她变真!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-4-19 19:59:21 | 显示全部楼层
@冬雪雪冬 @lumber2388779 @ooxx7788 @gopythoner @jerryxjr1220
来来来!算法,你们的最爱!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-4-19 20:35:23 | 显示全部楼层
def sum_num(n):
        result = 0
        c = 1
        num_list = list(range(1,n+1))
        while num_list:
                tmp = 1
                for i in range(c):
                        if len(num_list)>0:
                                tmp *= num_list.pop(0)
                result += tmp
                c += 1
        else: 
                return result

评分

参与人数 3荣誉 +5 鱼币 +4 收起 理由
moc + 1 + 1 谢谢分享!
ooxx7788 + 1 我就服jerry大神!
新手·ing + 3 + 3 支持楼主!

查看全部评分

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

使用道具 举报

发表于 2017-4-19 20:37:40 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-4-20 09:42:29 | 显示全部楼层
def my_math(n):
    z = (i for i in range(1,n+1))
    my_sum = 0
    for i in range(1,n+1):
        qiuji = 1
        for y in range(0,i):
            try:
                qiuji*=z.__next__()
            except:pass
        if qiuji !=1:
                my_sum += qiuji
    return my_sum+1

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
新手·ing + 3 + 3 支持楼主!

查看全部评分

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

使用道具 举报

发表于 2017-4-20 09:43:58 | 显示全部楼层
弄个笨办法的。
def func(n):
    list1 = [str(i) for i in range(1, n + 1)]
    list2 = []
    x = 1
    count = 0
    while count < n:
        list2.append('+')
        list2.extend(['*'] * x)
        count += 1 + x
        x += 1
    sum1 = ''
    for i in range(n - 1):
        sum1 += list1[i] + list2[i]
    sum1 += list1[-1]
    return eval(sum1)
>>> func(20)
2226007
>>> func(10)
5167

点评

我很赞同!: 5.0
我很赞同!: 5
  发表于 2017-4-20 16:56
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-4-20 11:31:02 | 显示全部楼层
number = input('请输入n: ')
num = int(number)
# 默认输入的数大于等于1
i = 1
string = ''
flag = False
for i in range(1, num + 1):
    if i == 1:
        string = string + '1'
        if i == num:
            flag = True
            break
    else:
        for j in range(int((i*(i -1) + 2)/2),int(((i*(i -1) + 2)/2) + i)):
            if j == (i*(i -1) + 2)/2:
                string = string + '+' + str(j)
            else :
                string = string + '*' + str(j)
            if j == num:
                flag = True
                break
    if flag:
        break
print(string)

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
新手·ing + 3 + 3

查看全部评分

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

使用道具 举报

发表于 2017-4-20 12:08:30 | 显示全部楼层
题 31(答题领鱼币) [修改]
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-4-20 13:36:50 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-4-20 14:46:12 | 显示全部楼层
当我第一次知道eval函数的时候,我就知道它是个神奇的东西
def getstr(n):
  dic = {}
  for m in range(1,n):
    dic[m] = "*"
  for i in range(1,n//2+1):
    k = sum(list(range(1,i+1)))
    if k < n:
      dic[k] = "+"
  thestr = ""
  for each in dic:
    thestr += (str(each)+dic[each])
  thestr += str(n)
  the_num = eval(thestr)
  print(thestr+"="+str(the_num))

getstr(20)
>>>1+2*3+4*5*6+7*8*9*10+11*12*13*14*15+16*17*18*19*20=2226007

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
新手·ing + 3 + 3 支持楼主!

查看全部评分

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

使用道具 举报

发表于 2017-4-20 14:57:18 | 显示全部楼层

我不同意你这个“笨”字
我觉得使用eval来解这种算术应该算是一种很划得来的方法,可以省去很多循环计算
我记得在知乎看过一个关于eval函数的传说,大意是一个麻神理工的大神在面试的时候,考官让他写一个函数,这个函数可以计算带有括号,除号等等数学运算符号的计算,然后大神问了一下是不是随便什么语言都行,考官说是的,然后大神就说eval(),写完了。。。。然后考场一片死寂


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

使用道具 举报

发表于 2017-4-20 15:03:15 | 显示全部楼层
新手·ing 发表于 2017-4-19 19:59
@冬雪雪冬 @lumber2388779 @ooxx7788 @gopythoner @jerryxjr1220
来来来!算法,你们的最爱!

你错了,我并不喜欢算法,毕竟我只搞爬虫,而且也只是简单实用excel分析信息,不需要去研究算法
不过有的算法的题目需要自己想构造函数,对这个比较感兴趣

点评

我很赞同!: 5.0
我很赞同!: 5
爬虫也要向你学习!  发表于 2017-4-20 16:57
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

使用道具 举报

发表于 2017-4-20 16:29:21 | 显示全部楼层
gopythoner 发表于 2017-4-20 14:57
我不同意你这个“笨”字
我觉得使用eval来解这种算术应该算是一种很划得来的方法,可以省去很多循环计算 ...

嗯,解释型语言很方便使用eval和exec。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-4-20 16:38:17 | 显示全部楼层
冬雪雪冬 发表于 2017-4-20 16:29
嗯,解释型语言很方便使用eval和exec。


使用eval直接计算N = 50000大概需要10秒左右
我试了一下其他用循环计算的,我一个帖子都发完了,还没出结果。。。
估计要几分钟

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
奔跑的小鱼 + 3 + 3 服气,效率高好多,get到了

查看全部评分

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

使用道具 举报

发表于 2017-4-20 16:40:11 | 显示全部楼层
gopythoner 发表于 2017-4-20 16:38
使用eval直接计算N = 50000大概需要10秒左右
我试了一下其他用循环计算的,我一个帖子都发完了,还没 ...

eval是个取巧的方法,如果是各种语言通用的算法就还得用循环了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-4-20 17:09:26 | 显示全部楼层
本帖最后由 ooxx7788 于 2017-4-20 17:14 编辑
gopythoner 发表于 2017-4-20 16:38
使用eval直接计算N = 50000大概需要10秒左右
我试了一下其他用循环计算的,我一个帖子都发完了,还没 ...


你是说我这个题目里面N=50000要10秒吗?
我试了下我的,几乎就是一点就出来啊

print(foo(200000))      # 我的
print(func(200000))     # 冬雪的
print(sum_num(200000))  # jerry的
看来还是工具快啊。

输出:
Total used 0.134005s, loops: 1.
Total used 1.011058s, loops: 1.
Total used 9.257532s, loops: 1.
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-4-20 18:33:37 | 显示全部楼层
def mysum(n=5):
    sum_=0
    cnt=1
    mul=1
    i=1
    while i<=n:
        for j in range(cnt):
            if  i<=n:
                mul *=i
                i +=1
            else:
                break
        sum_ +=mul
        cnt +=1
        mul=1
    return sum_
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-4-20 19:35:09 | 显示全部楼层
ooxx7788 发表于 2017-4-20 17:09
你是说我这个题目里面N=50000要10秒吗?
我试了下我的,几乎就是一点就出来啊

你这个6了,我那个运行了5分钟还没弄出来
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-10 17:32

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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