鱼C论坛

 找回密码
 立即注册
楼主: 冬雪雪冬

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

[复制链接]
发表于 2018-8-3 21:34:04 | 显示全部楼层
def test194(num):
    temp = []
    str_num = str(num)
    for i in range(len(str_num)-1):
        if str_num[i+1] == '0':
            continue
        else:
            first_str_num = str_num[0:i+1]
            last_str_num = str_num[i+1:len(str_num)]
            temp.append(int(first_str_num)*int(last_str_num))
    return max(temp)

print(test194(472103856))

评分

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

查看全部评分

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

使用道具 举报

发表于 2018-8-3 23:36:51 | 显示全部楼层
  1. def chaifen(digit):
  2.     digit_mul_max = (digit//10) * (digit%10)
  3.     for i in range(1,len(str(digit))):
  4.         digit_l = digit//(10**i)
  5.         digit_r = digit%(10**i)
  6.         digit_mul = digit_l * digit_r
  7.         if digit_mul >= digit_mul_max:
  8.             a = i
  9.             digit_mul_max = digit_mul
  10.     return a

  11. digit = input("请输入一串数字")
  12. digit = int(digit)
  13. a = chaifen(digit)
  14. print("%s与%s的乘积最大,为%s"%(digit//(10**a), digit%(10**a), (digit//(10**a))*(digit%(10**a))))
复制代码

评分

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

查看全部评分

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

使用道具 举报

发表于 2018-8-3 23:52:26 | 显示全部楼层
def func(a):
    a=str(a)
    b=len(a)-1
    c=0
    for i in range(b):
        x=int(a[:i+1])
        y=int(a[i+1:])
        if x*y>c:
            a1=x
            a2=y
            c=x*y
            
    print(str(a1)+"和"+str(a2)+"相乘最大:"+str(c))
        
  
func(472103856)
#新手上路

评分

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

查看全部评分

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

使用道具 举报

发表于 2018-8-4 01:35:05 | 显示全部楼层
本帖最后由 凌九霄 于 2018-8-4 17:30 编辑
  1. def maxproduct(num):
  2.     lst = [ ]
  3.     stringnum = str(num)
  4.     lens = len(stringnum)
  5.     if lens < 2: return None
  6.     for i in range(1, lens):
  7.         p = int(stringnum[ :i ]) * int(stringnum[ i: ])
  8.         lst.append((int(stringnum[ :i ]), int(stringnum[ i: ]), p))
  9.     return sorted(lst, key=lambda x: x[ 2 ], reverse=True)[ 0 ]
复制代码

评分

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

查看全部评分

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

使用道具 举报

发表于 2018-8-4 11:46:02 | 显示全部楼层
def getMax():
    str0 = input("请输入一个多位整数:")
    list0 = []
    if not str0.isdigit():
        print("输入错误")
        return -1
    for i in range(1, len(str0)):
        num1 = str0[:i]
        num2 = str0[i:]
        sum0 = int(num1) * int(num2)
        list0.append(sum0)
        if max(list0) == sum0:
            maxNum1 = num1
            maxNum2 = num2
    print("拆分为" + maxNum1 + "*" + maxNum2 + ",积最大为" + str(max(list0)))
    return 0

getMax()

评分

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

查看全部评分

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

使用道具 举报

发表于 2018-8-4 12:27:20 | 显示全部楼层
  1. def fun194(num=0):
  2.     '求多位的正整数拆分为2部分后乘积最大的一种分法'
  3.     i=rem=quo=0
  4.     proList=[]
  5.     while rem!=num:
  6.         rem=num%(10**i)
  7.         quo=num//(10**i)
  8.         i=i+1
  9.         proList.append(quo*rem)
  10.     max_i=proList.index(max(proList))
  11.     return num//(10**(max_i)),num%(10**(max_i)),max(proList)
  12.    
  13. print(fun194(472103856))
复制代码

评分

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

查看全部评分

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

使用道具 举报

发表于 2018-8-4 13:19:46 | 显示全部楼层
本帖最后由 llok4 于 2018-8-4 13:25 编辑
  1. running=True
  2. while running:
  3.     num=input('请输入一个多位的正整数:\n')
  4.     if num.isdigit():
  5.         running=False
  6.     else:
  7.         print('输入有误!')
  8. max=0
  9. max_x=0
  10. max_y=0
  11. for i in range(1,len(num)-1):
  12.     x=int(num[:i])
  13.     y=int(num[i:])
  14.     product=x*y
  15.     if product>max:
  16.         max=product
  17.         max_x,max_y=x,y
  18. print('%s拆分开的2部分中,%d,%d的乘积最大,为%d'% (num,max_x,max_y,max))
复制代码

点评

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

使用道具 举报

发表于 2018-8-4 14:20:31 | 显示全部楼层
本帖最后由 天圆突破 于 2018-8-4 14:33 编辑
  1. def func194(num):
  2.     num = str(num)
  3.     num_split, num_product = [[int(num[:i]),int(num[i:])] for i in range(1,len(num))], [int(num[:i])*int(num[i:]) for i in range(1,len(num))]
  4.     return num_split[num_product.index(max(num_product))], max(num_product)

  5. if __name__ == '__main__':
  6.     print(func194(472103856))
复制代码

这个有个问题,要是有多个最大乘积只能显示第一个……

更新一下
  1. def func194(num: int) -> list:
  2.     num = str(num)
  3.     return list(filter(lambda x: x[1]==max([int(num[:i])*int(num[i:]) for i in range(1,len(num))]), [[[int(num[:i]),int(num[i:])], int(num[:i])*int(num[i:])] for i in range(1,len(num))]))
复制代码

评分

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

查看全部评分

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

使用道具 举报

发表于 2018-8-4 14:42:44 | 显示全部楼层
print('请输入数字:')
number=input()
m=len(number)
print(m)
plus=[]
temp=0
for i in range(0,m-1):
    if i+1==m:
        break
    else:
        plus[i].append(int(number[0:i+1])*int(number[(-m+i+1)]))
for j in range(0,m-1):
        if plus[j]>plus[j+1]:
            temp=plus[j]
            
print('乘积最大的拆分是:')   
print(int(number[0:j]),end='')
print(int(number[-m-j+1]))

点评

IndexError: list index out of range  发表于 2018-8-7 20:19
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-8-4 16:01:26 | 显示全部楼层
  1. def fun194(x):
  2.     x = str(x)
  3.     list_1 = [int(x[:i])*int(x[i:]) for i in range(1,len(x))]
  4.     list_2 = [[int(x[:i]),int(x[i:])] for i in range(1,len(x))]
  5.     return list_2[list_1.index(max(list_1))]
复制代码

评分

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

查看全部评分

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

使用道具 举报

发表于 2018-8-4 16:19:20 From FishC Mobile | 显示全部楼层
num=int(input())
n=1
number=num
x=number//10
while x!=0:
        number=number/10
        x=number//10
        n+=1
print(n)#panduanweishu
product=[]
a=[]
b=[]
product.append(0)
a.append(0)
b.append(0)
for i in range(1,n):
        a.append(num%(10**i))
        b.append(num//(10**i))
        product.append(a[i]*b[i])
        if product[0]>product[i]:
                pass
        else:
                product[0]=product[i]
                a[0]=a[i]
                b[0]=b[i]
print('%d %d %d' % (product[0],a[0],b[0]))

评分

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

查看全部评分

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

使用道具 举报

发表于 2018-8-4 19:46:42 | 显示全部楼层
  1. aaa = 472103856
  2. str1 = str(aaa)
  3. bbb = max([int(str1[:i])*int(str1[i:]) for i in range(1,9)])
  4. for i in range(1,9):
  5.     if int(str1[:i])*int(str1[i:]) == bbb:
  6.         print("将%s拆分成%s和%s后的乘积为%s最大"%(aaa,str1[:i],str1[i:],bbb))
  7. >>>将472103856拆分成472103和856后的乘积为404120168最大
复制代码

点评

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

使用道具 举报

发表于 2018-8-4 23:46:33 | 显示全部楼层
  1. #coding:utf-8
  2. #472103856

  3. num = input('请输入多位数的正整数:')
  4. dic = {}

  5. for i in range(len(num)-1):
  6.     for j in range(1,len(num)):
  7.         # print(num[i:j],num[j:],end='\n')
  8.         result = int(num[i:j]) * int(num[j:])
  9.         dic['%s * %s'%(num[i:j],num[j:])] = result
  10.     break
  11.    
  12. sort_result = sorted(dic.items(),key = lambda x:x[1],reverse = True)

  13. print('分割该正整数的最大乘积为:' ,sort_result[0])
复制代码

评分

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

查看全部评分

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

使用道具 举报

发表于 2018-8-6 09:40:52 | 显示全部楼层
x="472103856"
y=[]
k=1
f=0
for i in range(1,len(x)):

    x1 = int(x[0:i])
    x2 = int(x[i:])
    y1 = x1*x2
    y.append(y1)
for j in range(0,len(y)):
    if y[j]>k:
        k=y[j]
        f=j
print ("最大值是:%s * %s = %d" %(x[0:j],x[j:],k))

点评

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

使用道具 举报

发表于 2018-8-6 16:25:19 | 显示全部楼层
  1. num = 472103856
  2. len_num = len(str(num)) + 1
  3. sqt = dict()
  4. try:
  5.     for i in range(1,len_num):
  6.         print(str(num)[0:i],'*',str(num)[i:len_num -1],'=',int(str(num)[i:len_num -1]) * int(str(num)[0:i]))
  7.         sqt[(str(num)[0:i],'*',str(num)[i:len_num -1])] = (int(str(num)[i:len_num -1]) * int(str(num)[0:i]))
  8. except:
  9.     pass
  10. print('其中', ''.join(max(sqt,key=sqt.get)), '=' ,sqt[max(sqt,key=sqt.get)],'的乘积最大')
复制代码

评分

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

查看全部评分

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

使用道具 举报

发表于 2018-8-6 16:25:54 | 显示全部楼层
本帖最后由 wyp02033 于 2018-8-17 14:59 编辑
  1. def find_max_product(num):
  2.     max_product = 0
  3.     index = 0
  4.     num_str = str(num)
  5.     if len(num_str) == 1:
  6.         return num
  7.     elif len(num_str) == 2:
  8.         return (int(num_str[0]), int(num_str[1])), int(num_str[0]) * int(num_str[1])
  9.     else:
  10.         for i in range(1, len(num_str)):
  11.             if int(num_str[:i]) * int(num_str[i:]) > max_product:
  12.                 index = i
  13.                 max_product = int(num_str[:i]) * int(num_str[i:])
  14.         return (int(num_str[:index]), int(num_str[index:])), max_product
复制代码

点评

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

使用道具 举报

发表于 2018-8-14 11:08:27 | 显示全部楼层
没有处理多组乘积相同时的组合,只取了其中一组。比如11111,可以是(111,11)(11,111),这里没有处理,有空再处理
  1. def fun194(d):
  2.     n = 10
  3.     tmp = []
  4.     while True:
  5.         if d // n:
  6.             tmp.append((d // n)*(d % n))
  7.             n *= 10
  8.         else:
  9.             break
  10.     if tmp:
  11.         mi = tmp.index(max(tmp))
  12.         return d // (10 ** (mi + 1)), d % (10 ** (mi + 1))
  13.     else:
  14.         return None


  15. print(fun194(472103856))
  16. print(fun194(6))
  17. print(fun194(55))
  18. print(fun194(1001))
复制代码


结果:
(472103, 856)
None
(5, 5)
(100, 1)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-8-22 17:11:22 | 显示全部楼层
str1 = '472103856'
list1 = []

for i in range(len(str1)-1):
    temp = int(str1[:i+1]) * int(str1[i+1:])
    list1.append(temp)
list1.sort()
print(list1[len(list1)-1])
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-8-22 19:29:51 | 显示全部楼层
list1 = []
i = 0
number = int(input())
num = number
while number > 0:
    number = number // 10
    i = i + 1
for n in range(0, i):
    ber = num
    u = num
    a = ber // (10 ** n)
    b = u % (10 ** n)
    list1.append(a * b)
print(max(list1))
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-9-24 17:33:15 | 显示全部楼层
  1. def fun_194(x,max_mul=0):
  2.     for i in range(1,len(str(x))-1):
  3.         max_mul=max(int(str(x)[:i])*int(str(x)[i:]),max_mul)
  4.     return max_mul
  5. print(fun_194(472103856))
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-3-29 00:22

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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