数组中最大的子数组之和
一.程序分析
1.使用Python语言进行编译程序,求数组中的最大子数组之和
输入,一个数组,和它的大小
输出,这个数组中最大子数组的和
Python代码段:
#定义变量
num = 0
strNum = ""
lis = []
lis1 = []
#获取输入内容
string = input("请输入数组数据,以‘.’隔开,以Enter结束:")
#将获取到的内容转换成为数组
for i in string:
if ord("9") >= ord(i) >= ord("0") or ord(i) == ord("-"):
strNum = strNum + i
else:
lis.append(int(strNum))
strNum = ""
lis.append(int(strNum))
strNum = ""
#将单个的子数组先放入新数组内
for i in lis:
lis1.append(int(i))
#将其余组合得到的和放入新数组
sumnum = 0
for i in range(2, len(lis) + 1):
for k in range(0, len(lis) - i + 1):
for j in range(i):
sumnum = sumnum + int(lis[k + j])
lis1.append(int(sumnum))
sumnum = 0
#找出最大值
maxNumber = 0
for i in lis1:
if i >= maxNumber:
maxNumber = i
print("maxNumber:"+maxNumber)
运行结果:
2.从文本文件中读输入的数据,熟悉文件操作, 文件有两种数据
第一个数字:这次测试中有多少个数据, 数字后面是冒号。
后续数字: 每个数据的值,用逗号隔开
文件内容: 17: -32, -10, 33, -23, 32, -12, 41, -12, 1, 3, 5, -98, 70, -21, 10, -9, 61
输出 sum = 71
Python代码段:
#定义变量
num = 0
strNum = ""
lis1 = []
lis2 = []
#读取文件内容
with open('text.txt', 'r', encoding='utf-8') as f:
string = f.read()
print(string)
#将获取到的内容转换成为数组
for i in string:
if ord(i) == ord(" "):
continue
if ord("9") >= ord(i) >= ord("0") or ord(i) == ord("-"):
strNum = strNum + i
else:
lis1.append(int(strNum))
strNum = ""
lis1.append(int(strNum))
strNum = ""
#将获取到的内容转换成为数组
for i in lis1:
lis2.append(int(i))
#将其余组合得到的和放入新数组
sumnum = 0
for i in range(2, len(lis1) + 1):
for k in range(0, len(lis1) - i + 1):
for j in range(i):
sumnum = sumnum + int(lis1[k + j])
lis2.append(int(sumnum))
sumnum = 0
#找出最大值
maxNumber = 0
for i in lis2:
if i >= maxNumber:
maxNumber = i
print("maxNumber:"+str(maxNumber))
运行结果:
3.用类/函数来实现.
需求:希望返回 3 种信息
1.最大子数组的和
2.最大子数组开始的下标
3.最大子数组结束的下标
Python代码段:
def ReadFile(Path):
with open(Path, 'r', encoding='utf-8') as f:
return f.read()
class MaxNumber:
maxNumber = 0
startSite = endSite = ""
string = "NULL"
List1 = []
def __init__(self, strings):
self.string = strings
def CreateList(self):
strNum = ""
for i in self.string:
if ord(i) == ord(" "):
continue
if ord("9") >= ord(i) >= ord("0") or ord(i) == ord("-"):
strNum = strNum + i
else:
self.List1.append(int(strNum))
strNum = ""
self.List1.append(int(strNum))
def FindMaxNumber(self):
sumnum = 0
length = len(self.List1)
for i in range(2, length + 1):
for k in range(0, length - i + 1):
for j in range(i):
sumnum = sumnum + int(self.List1[k + j])
self.List1.append([sumnum, k, k + i - 1])
sumnum = 0
def format(self):
count = 0
for i in self.List1:
if isinstance(i, int):
self.List1[count] = [i, count, count]
count = count + 1
def ShowMax(self):
self.CreateList()
self.FindMaxNumber()
self.format()
for i in self.List1:
if i[0] >= self.maxNumber:
self.maxNumber = i[0]
self.startSite = i[1]
self.endSite = i[2]
print("最大的子元组之和为:" + str(self.maxNumber))
print("起始位置为:" + str(self.startSite))
print("结束位置为:" + str(self.endSite))
if __name__ == '__main__':
# 定义变量
string = ""
# 读取文件内容
filePath = "text.txt"
string = ReadFile(filePath)
# 实例化
maxnum = MaxNumber(string)
maxnum.ShowMax()
运行结果: