Crossin的编程教室

标题: 【每周一坑】求乘积最大 [打印本页]

作者: supermouse24    时间: 2017-4-29 12:05
标题: 【每周一坑】求乘积最大
题目地址:
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


作者: crossin先生    时间: 2017-4-29 23:36
点个赞
作者: zhaozihang    时间: 2017-5-24 10:04
第一道 right = i-len(num_str)  这里算出来不是负数了吗  求解
作者: zhaozihang    时间: 2017-5-24 14:16
还有一个问题 第二道里面 我这里必须写成li2=li1[i]  这样结果才对
作者: crossin先生    时间: 2017-5-24 14:45
zhaozihang 发表于 2017-5-24 14:16
还有一个问题 第二道里面 我这里必须写成li2=li1  这样结果才对

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

第二题他好像笔误写错了,应有i
作者: zhaozihang    时间: 2017-5-25 10:17
搜嘎 谢谢crossin先生
作者: wolfog    时间: 2017-8-31 16:33
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 "请输入一个纯数字"

作者: wolfog    时间: 2017-8-31 16:34
wolfog 发表于 2017-8-31 16:33
isTrue = True
def separateNum(number):
    listt = []

这个是顺序固定的

作者: wolfog    时间: 2017-9-1 11:01
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、数字确定后,就可以排序了




欢迎光临 Crossin的编程教室 (https://bbs.crossincode.com/) Powered by Discuz! X2.5