设为首页收藏本站

Crossin的编程教室

 找回密码
 立即加入
查看: 4793|回复: 8
打印 上一主题 下一主题

【每周一坑】求乘积最大

[复制链接]

1

主题

0

好友

7

积分

新手上路

Rank: 1

跳转到指定楼层
楼主
发表于 2017-4-29 12:05:25 |只看该作者 |倒序浏览
题目地址:
https://mp.weixin.qq.com/s?__biz ... LPUZz7%2BHBPAW1q#rd

下面是代码
#coding=utf-8
'''随机输入一个任意长度的数字,把其分割两部分,算出积成最大'''

def product(num):
    num_str = num
    result_max = 0
    for i in range(1,len(num_str)):
        num_left = int(num_str[:i])
        right = i-len(num_str)
        num_right = int(num_str[right:])
        result = num_left*num_right
        if result > result_max:
            result_max = result
            result_left = num_left
            result_right = num_right
    print  result_left,result_right,result_max



'''随机输入一个任意长度的数字,随机排列后,把其分割两部分,算出积成最大'''import  itertools      
def product_2(num):
    num_str = num
    num_li =[]
    result_max = 0
    iter = itertools.permutations(num_str,len(num_str))     #输入的数字需要排列组合
    li1 = list(iter)
    for i in range(0,len(li1)):
        li2 = li1
        num_str2 = ''
        for j in range(0,len(num_str)):
            num_str2 += li2[j]
            num_str = num_str2
        num_li.append(num_str2)
    while len(num_li) > 0:
        num_str = num_li.pop()
        for i in range(1,len(num_str)):
            num_left = int(num_str[:i])
            right = i-len(num_str)
            num_right = int(num_str[right:])
            result = num_left*num_right
            if result > result_max:
                result_max = result
                result_left = num_left
                result_right = num_right
    print result_left,result_right,result_max

回复

使用道具 举报

174

主题

45

好友

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

沙发
发表于 2017-4-29 23:36:09 |只看该作者
点个赞
#==== Crossin的编程教室 ====#
微信ID:crossincode
网站:http://crossincode.com
回复

使用道具 举报

1

主题

0

好友

33

积分

新手上路

Rank: 1

板凳
发表于 2017-5-24 10:04:08 |只看该作者
第一道 right = i-len(num_str)  这里算出来不是负数了吗  求解
回复

使用道具 举报

1

主题

0

好友

33

积分

新手上路

Rank: 1

地板
发表于 2017-5-24 14:16:42 |只看该作者
还有一个问题 第二道里面 我这里必须写成li2=li1[i]  这样结果才对
回复

使用道具 举报

174

主题

45

好友

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

5#
发表于 2017-5-24 14:45:00 |只看该作者
zhaozihang 发表于 2017-5-24 14:16
还有一个问题 第二道里面 我这里必须写成li2=li1  这样结果才对

切片操作支持负数,负数表示倒数第几位

第二题他好像笔误写错了,应有i
#==== Crossin的编程教室 ====#
微信ID:crossincode
网站:http://crossincode.com
回复

使用道具 举报

1

主题

0

好友

33

积分

新手上路

Rank: 1

6#
发表于 2017-5-25 10:17:23 |只看该作者
搜嘎 谢谢crossin先生
回复

使用道具 举报

1

主题

0

好友

39

积分

新手上路

Rank: 1

7#
发表于 2017-8-31 16:33:26 |只看该作者
isTrue = True
def separateNum(number):
    listt = []
    for i in range(1, len(number)):
        intA = int(number[:i])
        intB = int(number[i:])
        listt.append(intB * intA)
    print max(listt)


while (isTrue):
    input = raw_input("请输入一个大于等于10数字:")
    if input.isdigit():
        if input.__len__() <= 1:
            print "您输入的数字小于10,请重新输入"
        else:
            isTrue = False
            separateNum(input)
    else:
        print "请输入一个纯数字"
回复

使用道具 举报

1

主题

0

好友

39

积分

新手上路

Rank: 1

8#
发表于 2017-8-31 16:34:56 |只看该作者
wolfog 发表于 2017-8-31 16:33
isTrue = True
def separateNum(number):
    listt = []

这个是顺序固定的
回复

使用道具 举报

1

主题

0

好友

39

积分

新手上路

Rank: 1

9#
发表于 2017-9-1 11:01:37 |只看该作者
import itertools

def separateNum(number):  # 将所有排序的数字的分割,然后找到最大值
    listt = []
    listMax = []
    for j in number:
        for i in range(1, len(j)):
            intA = int(j[:i])
            intB = int(j[i:])
            listt.append(intB * intA)
        listMax.append(max(listt))
    print max(listMax)


def permutationMethod(sourceNum):  # 输入一个数字,将其所有的排列装进
    iter = itertools.permutations(sourceNum, len(sourceNum))
    listA = list(iter)
    listB = []
    for i in listA:  # listA的元素是tuple类型的
        strAll = ""
        for j in i:
            strAll += j
        listB.append(strAll)
    separateNum(listB)

listA = []
isTrue = True
while (isTrue):
    input = raw_input("请输入一个大于等于10数字:")
    if input.isdigit():
        if input.__len__() <= 1:
            print "您输入的数字小于10,请重新输入"
        else:
            isTrue = False
            permutationMethod(input)
    else:
        print "请输入一个纯数字"



# 1、输入的纯数字,可以排列出他的所有数字。
# 2、数字确定后,就可以排序了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即加入

QQ|手机版|Archiver|Crossin的编程教室 ( 苏ICP备15063769号  

GMT+8, 2024-4-20 07:59 , Processed in 0.026164 second(s), 21 queries .

Powered by Discuz! X2.5

© 2001-2012 Comsenz Inc.

回顶部