数组中最大的子数组之和

一.程序分析

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()
运行结果:

 

 

 


 

 
 
 
posted @ 2021-03-13 17:15  OHHO  阅读(169)  评论(2)    收藏  举报