鱼C论坛

 找回密码
 立即注册
查看: 3748|回复: 53

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

[复制链接]
发表于 2018-8-3 14:12:30 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 冬雪雪冬 于 2018-8-7 19:58 编辑

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

1. 楼主不再提供答案。
2. 请大家先独立思考,再参考其他鱼油的解答,这样才有助于自己编程水平的提高。开始阶段是看不到其他人的回帖的,等答题完成,开始评分时再取消限制。
3. 鼓励大家积极答题,奖励的期限为出题后24小时内。
4. 根据答案的质量给予1~3鱼币的奖励。

题目:
多位的正整数可以从中间拆分为2部分,如何拆分使得这2部分的乘积最大,例如
472103856可以拆分为
47210385, 6
4721038, 56
472103, 856
47210, 3856
4721, 3856
472, 103856
47, 2103856
4, 72103856
而472103, 856的乘积最大,为404120168

本帖被以下淘专辑推荐:

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

使用道具 举报

发表于 2018-8-3 14:46:53 | 显示全部楼层
def fun194(s):       
        ss=str(s)       
        return max([int(ss[:i])*int(ss[i:]) for i in range(1,len(ss))])
       
s=472103856
print(fun194(s))

评分

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

查看全部评分

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

使用道具 举报

发表于 2018-8-3 14:54:39 | 显示全部楼层
def fun194(s):       
        return max([(s//10**i)*(s%10**i) for i in range(1,len(str(s)))])

s=472103856
print(fun194(s))
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-8-3 15:19:46 | 显示全部楼层
  1. def fun194(n):
  2.     product_list = [int(str(n)[:i]) * int(str(n)[i:]) for i in range(1, len(str(n))-1)]
  3.     return int(str(n)[:product_list.index(max(product_list))+1]), int(str(n)[product_list.index(max(product_list))+1:])


  4. print(fun194(472103856))
复制代码

点评

1001时不对  发表于 2018-8-7 20:00
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-8-3 15:33:15 | 显示全部楼层
  1. biggest = 0
  2. k = str(input("请输入一个正整数:"))

  3. while k:
  4.     try:
  5.         k1 = int(k)
  6.     except:
  7.         print("输入错误,请重新输入。")
  8.         k = str(input("请输入一个正整数:"))
  9.         continue
  10.    
  11.     if int(k) < 0:
  12.         print("输入错误,请重新输入。")
  13.         k = str(input("请输入一个正整数:"))
  14.         continue
  15.     elif len(k) < 2:
  16.         print("请输入一个2位数以上的正整数。")
  17.         k = str(input("请输入一个正整数:"))
  18.         continue
  19.     else:
  20.         for i in range(len(k)):
  21.             if i == 0:
  22.                 pass
  23.             else:
  24.                 result = int(k[i:]) * int(k[:i])
  25.                 if result > biggest:
  26.                     biggest = result
  27.                     front = k[:i]
  28.                     last = k[i:]
  29.         print("%s,%s的乘积最大,为%d"%(front,last,biggest))
  30.         break
复制代码

评分

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

查看全部评分

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

使用道具 举报

发表于 2018-8-3 15:56:11 | 显示全部楼层
  1. def max_mult(num):
  2.         num = str(num)
  3.         max_mult_list = []
  4.         for i in range(1, len(num)):
  5.                 num_left = int(num[:i])
  6.                 num_right = int(num[i:])
  7.                 max_mult_list.append(num_left * num_right)
  8.         return max(max_mult_list)


  9. max_mult(472103856)
复制代码

评分

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

查看全部评分

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

使用道具 举报

发表于 2018-8-3 16:23:26 | 显示全部楼层
  1. def f():
  2.         list0 = []
  3.         s = input('输入数字:')
  4.         for i in range(len(s)-1):
  5.                 a = int(s[:i+1])
  6.                 b = int(s[i+1:])
  7.                 list0.append(a*b)
  8.         list0.sort(reverse=True)
  9.         return list0[0]

  10. >>> f()
  11. 输入数字:472103856
  12. 404120168
复制代码

评分

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

查看全部评分

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

使用道具 举报

发表于 2018-8-3 16:50:50 | 显示全部楼层
  1. def fun194(num):
  2.         num = str(num)
  3.         l = []
  4.         for i in range (1,len(num)):
  5.                 l.append(int(num[:i]) * int(num[i:]))
  6.         return sorted(l)[-1]
  7. fun194(472103856)
复制代码

评分

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

查看全部评分

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

使用道具 举报

发表于 2018-8-3 16:51:04 | 显示全部楼层
  1. strs = '472103856'

  2. def fun194(strs):
  3.     ret = 0
  4.     retstr = ''
  5.     for i in range(1, len(strs)):
  6.         if retstr == '':
  7.             retstr = strs[:i], strs[i:]
  8.             ret = int(strs[:i]) * int(strs[i:])
  9.         else:
  10.             temp = int(strs[:i]) * int(strs[i:])
  11.             if temp < ret:
  12.                 continue
  13.             else:
  14.                 retstr = strs[:i], strs[i:]
  15.                 ret = int(strs[:i]) * int(strs[i:])
  16.     return retstr


  17. if __name__ == '__main__':
  18.     print fun194(strs)
复制代码

评分

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

查看全部评分

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

使用道具 举报

发表于 2018-8-3 16:55:09 | 显示全部楼层
本帖最后由 chongchuigu 于 2018-8-3 16:57 编辑
  1. def a194(n):
  2.         n=str(n)
  3.         result=[0,0]
  4.         for i in range(1,len(n)):
  5.                 if int(n[:i])*int(n[i:])>result[1]:
  6.                         result=[n[:i]+'*'+n[i:],int(n[:i])*int(n[i:])]
  7.         print('乘积最大的是%s,结果是%d' % (result[0],result[1]))
  8. a194(472103856)
复制代码

评分

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

查看全部评分

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

使用道具 举报

发表于 2018-8-3 17:15:11 | 显示全部楼层
本帖最后由 colinshi 于 2018-8-8 10:30 编辑
  1. def func194(b):
  2.     a = str(b)
  3.     tmp = 0
  4.     for i in range(1, len(a)):
  5.         if tmp <= (int(a[i:])*int(a[:i])):
  6.             tmp = (int(a[i:])*int(a[:i]))
  7.             r = i
  8.     print(a[:r], '*', a[r:])


  9. if __name__ == '__main__':
  10.     func194(472103856)
  11.     func194(19991)
  12.     func194(9999999)
复制代码


已修正

点评

1001时不对  发表于 2018-8-7 20:05
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-8-3 17:36:51 | 显示全部楼层
def find_max(x):
    max_new = x[1]
    for each in x:
        if each > max_new:
            max_new = each
    return [max_new, x.index(max_new)]

def dot_max(x):
    dot = []
    m = 10
    remain = x%m      # 求余
    while True :
        if remain == x:
            break
        a = x//m
        dot.append(a * remain)
        m *= 10
        remain = x % m
    rotation = find_max(dot)
    m = 10
    for i in range(rotation[1]):
        m = m*10
    print('%d拆分为%d和%d乘积最大,为%d'% (x, x%m, x//m, rotation[0]))


p = int(input('请输入一个正整数:'))
dot_max(p)

评分

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

查看全部评分

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

使用道具 举报

发表于 2018-8-3 17:49:56 | 显示全部楼层
  1. Num = input ("请输入一个整型数:")

  2. ToStr = str(Num)
  3. Tolist = list(Num)
  4. Lng = len(ToStr)
  5. Max = 0
  6. k = [0,0]
  7.    
  8. for each in range(Lng - 1):
  9.     # 将整数转成字符切片
  10.     (a, b) = ToStr.split(Tolist[each  + 1], 1)
  11.     temp = (int(a) * int(Tolist[each  + 1] + b))
  12.     # 如果求出的乘积比Max大则使用当前拆分
  13.     if Max < temp:
  14.         Max = temp
  15.         k[0] = int(a)
  16.         k[1] = int(Tolist[each  + 1] + b)
  17.         
  18. # 打印出最大乘积方拆法
  19. print (k)
复制代码

点评

中间有0出错  发表于 2018-8-7 20:07
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-8-3 17:53:27 | 显示全部楼层
str = '472103856'
max = 0

for i in range(len(str)-2):
     list = str.split(str[i+1],1)
     sqr = int(list[0]) * int(list[1])
     if sqr>max:
         max=sqr
    else:
        max=max
print(max)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-8-3 18:00:28 | 显示全部楼层
  1. def num(x):
  2.     nums=0
  3.     x=str(x)
  4.     print('%s可拆分为'% x)
  5.     for index in range(1,len(x)):
  6.         a=x[:index]
  7.         b=x[index:]
  8.         print(a,b)
  9.         if nums<int(a)*int(b):
  10.             nums=int(a)*int(b)
  11.             y=int(a)
  12.             z=int(b)
  13.     print('而%d,%d的乘积最大,为%d'%(y,z,nums))
  14.    
  15. num(472103856)
复制代码

评分

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

查看全部评分

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

使用道具 举报

头像被屏蔽
发表于 2018-8-3 18:05:45 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-8-3 18:21:38 | 显示全部楼层
  1. def fun194(n):
  2.     length = len(str(n))
  3.     mul_max = 0
  4.     n1_max = 0
  5.     n2_max = 0
  6.     for i in range(length-1):
  7.         n1 = n // (10**(i+1))
  8.         n2 = n % (10**(i+1))
  9.         mul = n1 * n2
  10.         if mul > mul_max:
  11.             mul_max = mul
  12.             n1_max = n1
  13.             n2_max = n2
  14.     print('将%d拆分两部分后,%d和%d乘积最大,为%d' %(n,n1_max,n2_max,mul_max))
复制代码

  1. >>> fun194(472103856)
  2. 将472103856拆分两部分后,472103和856乘积最大,为404120168
复制代码

评分

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

查看全部评分

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

使用道具 举报

发表于 2018-8-3 18:59:55 | 显示全部楼层
  1. def fun194(x):
  2.     t=str(x)
  3.     z=0
  4.     A=0,0
  5.     for i in range(1,len(t)):
  6.         m,n=int(t[:i]),int(t[i:])
  7.         y=m*n
  8.         if y>z:
  9.             z=y
  10.             A=m,n
  11.     return A
复制代码

评分

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

查看全部评分

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

使用道具 举报

发表于 2018-8-3 19:04:57 | 显示全部楼层
本帖最后由 claws0n 于 2018-8-3 19:07 编辑
  1. x = 472103856

  2. def fun194(x):
  3.     i ,RHS = 0,0
  4.     b = [0,0,0]
  5.     while x > 10:
  6.         LHS = x // 10
  7.         RHS += (x % 10)*10**(i)
  8.         print(LHS, RHS, '   ',LHS*RHS)
  9.         if b[2] < LHS*RHS:
  10.             b[0] = LHS
  11.             b[1] = RHS
  12.             b[2] = LHS*RHS
  13.         i += 1
  14.         x = LHS

  15.     print('\nThe largest product is', b[0],'*', b[1],'=', b[2])

  16. fun194(x)

  17. >>>
  18. 47210385 6     283262310
  19. 4721038 56     264378128
  20. 472103 856     404120168
  21. 47210 3856     182041760
  22. 4721 3856     18204176
  23. 472 103856     49020032
  24. 47 2103856     98881232
  25. 4 72103856     288415424

  26. The largest product is 472103 * 856 = 404120168
复制代码

评分

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

查看全部评分

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

使用道具 举报

发表于 2018-8-3 20:36:16 | 显示全部楼层
  1. >>> def fun( n ):
  2.         sn  = str(n)
  3.         t = [(int(sn[:i]),int(sn[i:])) for i in range(1,len(sn))]
  4.         r = [x[0]*x[1] for x in t]
  5.         m = max(r)
  6.         return [t[i] for i in range(len(t)) if m==r[i]]

  7. >>> fun(213)
  8. [(21, 3)]
  9. >>> fun(111111)
  10. [(111, 111)]
  11. >>> fun(472103856)
  12. [(472103, 856)]
  13. >>>
复制代码

评分

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

查看全部评分

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-3-28 21:34

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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