算法分析与设计实验-最大K乘积问题
最大K乘积问题
问题描述
设I是一个n位十进制整数。如果将I划分为k段,则可得到k个整数。这k个整数的乘积称为I的一个k乘积。试设计一个算法,对于给定的I和k,求出I的最大k乘积。
编程任务;
对于给定的I 和k,编程计算I 的最大k 乘积。
数据输入:
输入的第1 行中有2个正整数n和k。正整数n是序列的长度;正整数k是分割的段数。接下来的一行中是一个n位十进制整数。(n<=10)。
实验设计
求一个i位的数分解为j个 部分后的最大积,等于求k位(1<=k<n)的数分解为j-1个部分后的最大积乘以剩下的那个数m[k+1][i]
可得出动态规划方程:
m[i][j]=num[1:i] j==1
m[i][j]= m[k][j-1]*num[k+1:i],j>1
从文件中读取数据 with open(inputfilename) as file_object:
解析字符串获取数据和列表
n,k=eval(mater[0][0]),eval(mater[0][1])
num=list(mater[1])
核心算法:
def divide(n,k,num):
创建二维列表
当分成一段时,返回值
for i in range(1,k):#分成2-k段
for j in range(i,n): #前j个数分成i段
for d in range(i,j+1):#前d个数分成i-1段,d+1个数为第i段
前i-1段与-段乘积最大值
在m[i][j]处保存
return m;
计算从高位数第i位到第j位组成的数字
def cal(num,i,j):
value=0
while j>=i:
value=value*10+eval(num[i])
i=i+1;
return value
将结果存入文件output.txt
file=open(outputfilename,"w")
file.write(str(m[k-1][n-1]))
实验代码
#coding=gbk
#coding:utf-8
'''
Created on 2020年6月17日
最大K乘积问题
@author: XXXX
'''
import numpy
numpy.set_printoptions(suppress=True)
inputfilename='D:\算法分析与设计/test2_1_input.txt' #输入文件路径
outputfilename='D:\算法分析与设计/test2_1_output.txt'
#计算从高位数第i位到第j位组成的数字
def cal(num,i,j):
value=0
while j>=i:
value=value*10+eval(num[i])
i=i+1;
return value
def divide(n,k,num):
m=[[0 for i in range(n)] for j in range(k)]
m[0][0]=eval(num[0])
for i in range(1,n): #分成一段时
m[0][i]=m[0][i-1]*10+eval(num[i])
for i in range(1,k):#分成2-k段
max=-1
for j in range(i,n): #前j个数分成i段
for d in range(i,j+1):#前d个数分成i-1段,d+1个数为第i段
value=m[i-1][d-1]*cal(num,d,j)
if(value>max):
max=value
m[i][j]=max
return m;
if __name__ == '__main__':
with open(inputfilename) as file_object:
mater=file_object.read()
mater=mater.split('\n')
mater[0]=mater[0].split()
n,k=eval(mater[0][0]),eval(mater[0][1])
num=list(mater[1])
m=divide(n,k,num)
#输出结果用于验证
for i in range(0,k):
print(m[i])
print("最大k乘积为:",m[k-1][n-1])
#将结果存入文件output.txt
file=open(outputfilename,"w")
file.write(str(m[k-1][n-1]))
file.close()
本文作者:发呆鱼
本文链接:https://www.cnblogs.com/dyiblog/articles/15929745.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步