设数组a是有n个元素的整数数组,从中找出最大和子序列
如题目所示,pascal语言编程题目;‘最大和子序列’是什么意思?意思是说数组中最大的两个数吗...
如题目所示,pascal语言编程题目;‘最大和子序列’是什么意思?
意思是说数组中最大的两个数吗 展开
意思是说数组中最大的两个数吗 展开
3个回答
展开全部
pascal语言不会,不过给你说下‘最大和子序列’,意思是在数组中找出几个连续的数据它们的和是最大的。 可能我没说清楚,给你举例吧
例: 一个数组:2,4,-33,34,45,-23,7
里面任意个数的连续数据都是这个数组的子序列
而34,45是和最大的
所以要查找的数组里必须有负数,不然就谈不上什么最大和子序列了(整个数组就是最大的)
不是两个数,是任意长度的,找出任意长度的子序列
假如:2,4,-33,34,45,-10,12,-2
这个的最大和子序列是:34,45,-10,12 理解的要素:1.任意长度 2.连续
例: 一个数组:2,4,-33,34,45,-23,7
里面任意个数的连续数据都是这个数组的子序列
而34,45是和最大的
所以要查找的数组里必须有负数,不然就谈不上什么最大和子序列了(整个数组就是最大的)
不是两个数,是任意长度的,找出任意长度的子序列
假如:2,4,-33,34,45,-10,12,-2
这个的最大和子序列是:34,45,-10,12 理解的要素:1.任意长度 2.连续
展开全部
const
n=10;
var
i,s,max,first,maxfirst,maxl:integer;
a:array[1..n]of
integer;
begin
for
i:=1
to
n
do
read(a[i]);
max:=a[1];s:=a[1];first:=1;maxfirst:=first;maxl:=0;
for
i:=2
to
n
do
begin
if
s<0
then
begin
s:=0;
first:=i;
end;
s:=s+a[i];
if
s>max
then
begin
max:=s;maxfirst:=first;maxl:=i-first;end;
end;
writeln('max=',max);
for
i:=maxfirst
to
maxfirst+maxl
do
write(a[i],'
');
writeln;
readln;
end.
n=10;
var
i,s,max,first,maxfirst,maxl:integer;
a:array[1..n]of
integer;
begin
for
i:=1
to
n
do
read(a[i]);
max:=a[1];s:=a[1];first:=1;maxfirst:=first;maxl:=0;
for
i:=2
to
n
do
begin
if
s<0
then
begin
s:=0;
first:=i;
end;
s:=s+a[i];
if
s>max
then
begin
max:=s;maxfirst:=first;maxl:=i-first;end;
end;
writeln('max=',max);
for
i:=maxfirst
to
maxfirst+maxl
do
write(a[i],'
');
writeln;
readln;
end.
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
var i,n,total,j,temp,ans:longint;
a,b:array[1..100000] of longint;
begin
read(n);
for i:=1 to n do
begin
read(a[i]);
b[i]:=a[i];
total:=total+a[i];
end;
for i:=2 to n do
begin
if a[i]<a[i-1]+a[i]
then a[i]:=a[i-1]+a[i];
if a[i]>ans
then ans:=a[i];
end;
for i:=2 to n do
begin
if b[i]>b[i-1]+b[i]
then b[i]:=b[i-1]+b[i];
if temp>b[i]
then temp:=b[i];
end;
if ans>total-temp
then writeln(ans)
else writeln(total-temp);
end.
a,b:array[1..100000] of longint;
begin
read(n);
for i:=1 to n do
begin
read(a[i]);
b[i]:=a[i];
total:=total+a[i];
end;
for i:=2 to n do
begin
if a[i]<a[i-1]+a[i]
then a[i]:=a[i-1]+a[i];
if a[i]>ans
then ans:=a[i];
end;
for i:=2 to n do
begin
if b[i]>b[i-1]+b[i]
then b[i]:=b[i-1]+b[i];
if temp>b[i]
then temp:=b[i];
end;
if ans>total-temp
then writeln(ans)
else writeln(total-temp);
end.
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询