鱼C论坛

 找回密码
 立即注册
楼主: ooxx7788

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

[复制链接]
发表于 2017-4-20 20:45:09 | 显示全部楼层
本帖最后由 冬雪雪冬 于 2017-4-20 20:46 编辑


还是原来的思路,把程序简化了。
  1. def func(n):
  2.     list1 = [str(i) for i in range(1, n + 1)]
  3.     str2 = ''.join(['+' + '*' * i for i in range(1, n // 2 +1)])
  4.     sum1 = sum(zip(list1, str2), ())
  5.     return eval(''.join(sum1[:-1]))
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

使用道具 举报

发表于 2017-4-20 22:21:31 | 显示全部楼层

可以边调试边看相乘的因子

本帖最后由 Play_with_you 于 2017-4-20 22:23 编辑

def fun(n):
    result = 1
    i=2
    j=1
    while((i+j)<=(n)):      
        result+= reduce(lambda x, y: x * y, list(range(i,i + j+1)))
        print(list(range(i,i + j+1)))
        i=i+j+1
        j=j+1
    else:
        try:
            result += reduce(lambda x, y: x * y, list(range(i,n+1)))
            print(list(range(i,n+1)))
        except:
            pass
    return result   
print(fun(2))
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-4-20 22:25:37 | 显示全部楼层
def fun(n):
    result = 1
    i=2
    j=1
    while((i+j)<=(n)):
        
        result+= reduce(lambda x, y: x * y, list(range(i,i + j+1)))
        print(list(range(i,i + j+1)))
        i=i+j+1
        j=j+1
    else:
        try:
            result += reduce(lambda x, y: x * y, list(range(i,n+1)))
            print(list(range(i,n+1)))
        except:
            pass
    return result
   
print(fun(2))
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-4-20 22:28:12 | 显示全部楼层
Play_with_you 发表于 2017-4-20 22:21
def fun(n):
    result = 1
    i=2

为什么这个那么像我写的呢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-4-20 23:30:11 | 显示全部楼层
#!/usr/bin/env python
#-*-coding:UTF-8-*-
#Filename:getmulti.py

last_n = input("Please input a int number:\n")
last_n = int(last_n)
m_count = 1
n_count = 1
total = 0
while True:
    temp1 = 1
    for i in range(0,m_count):
        temp1 *= (n_count+i)
        n_count += 1
        if n_count > last_n:
            break
    total += temp1
    if n_count > last_n:
        break
print total
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-4-21 09:57:45 | 显示全部楼层
global m,n

def partK(k): #第k项
    global m,n
    res = 1
    for i in range (k):
        res = res*m
        m=m+1
        if m>n: break
    return res

if __name__ == "__main__":
    m=1 #计算位置
    n = int(input("输入自然数:\n"))            
    add = 0
    for j in range(1,n+1):
        add = add + partK(j)
        if m>n:break
    print(add)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

其实一般来讲代码量和运行时间是成反比的,也就是代码越长,运行时间越短(一般情况下)。
就好比如果你会汇编语言,来写这么个计算程序,速度应该远快于我们用python写的,但是代码量要多得多。
另外,对于这题,理论上循环应该比直接eval计算要快。因为eval实际计算时,也是先转换成数字,再累乘,再累加的。循环事实上只要后2步就可以了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-4-21 10:58:46 | 显示全部楼层
jerryxjr1220 发表于 2017-4-21 10:51
其实一般来讲代码量和运行时间是成反比的,也就是代码越长,运行时间越短(一般情况下)。
就好比如果你会 ...


原来如此
那这样看来使用eval最主要的还是可以节省一点代码量,不过在构造公式的时候还是需要一定的代码来支持的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-4-21 11:08:25 From FishC Mobile | 显示全部楼层
gopythoner 发表于 2017-4-21 10:58
原来如此
那这样看来使用eval最主要的还是可以节省一点代码量,不过在构造公式的时候还是需 ...

其实我解这题的时候也根本没考虑运行时间,不然不应该用列表的pop的来做循环,直接用index指针要快得多,其实我也是图方便,省事。
所以说,往往代码越是省事,运行时间就越不省时了…
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

使用道具 举报

发表于 2017-4-23 09:50:53 | 显示全部楼层

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)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

使用道具 举报

发表于 2017-4-28 19:09:45 | 显示全部楼层
  1. n=13
  2. a=[]
  3. i=1
  4. ii=0
  5. nn=1
  6. while i :
  7.     x=1
  8.     for j in range(i):
  9.         x*=nn
  10.         nn+=1
  11.         if nn>n:
  12.             ii=1
  13.             break
  14.     a.append(x)
  15.     if ii :
  16.         break
  17.     i+=1
  18. print(sum(a))
复制代码

  1. >>>
  2. RESTART: C:\Users\Administrator\AppData\Local\Programs\Python\Python35-32\test.py
  3. 6883
  4. >>> 1+2*3+4*5*6+7*8*9*10+11*12*13
  5. 6883
  6. >>>
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-5-3 10:43:55 | 显示全部楼层
#coding: gbk


def test(num):
    list1 = list(range(1, num+1))
    def warpper(alist, chengNum = 1, res = 0):
        alist = [str(i) for i in alist]
        if len(alist) == 1:
            return int(alist[0])
        if len(alist) <= chengNum + 2:
            return int(alist[0]) + eval('*'.join(alist[1:chengNum + 2]))
        sub = int(alist[0]) + eval('*'.join(alist[1:chengNum + 2]))
        alist = [str(sub)] + alist[chengNum + 2:]
        return warpper(alist, chengNum +1, res )
    return warpper(list1)

print(test(13))
print(1+2*3+4*5*6+7*8*9*10+11*12*13)
print(test(16))
print(1+2*3+4*5*6+7*8*9*10+11*12*13*14*15+16)

结果
6883
6883
365543
365543
[Finished in 0.2s]
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-5-3 15:59:04 | 显示全部楼层
给力给力
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-5-9 19:51:49 From FishC Mobile | 显示全部楼层
怎么获得鱼币?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-5-14 14:47:31 | 显示全部楼层
看看
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-5-16 18:32:06 From FishC Mobile | 显示全部楼层
呵呵
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-5-18 20:11:41 From FishC Mobile | 显示全部楼层
我就是来看回复的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-3-28 19:11

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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