
最大连续数字之和
发布日期:2021-05-15 00:45:48
浏览次数:26
分类:原创文章
本文共 1123 字,大约阅读时间需要 3 分钟。
给定K个整数的序列{ N1, N2, …, NK },其任意连续子序列可表示为{ Ni, Ni+1, …,
Nj },其中 1 <= i <= j <= K。最大连续子序列是所有连续子序列中元素和最大的一个,
例如给定序列{ -2, 11, -4, 13, -5, -2 },其最大连续子序列为{ 11, -4, 13 },最大和
为20。
在今年的数据结构考卷中,要求编写程序得到最大和,现在增加一个要求,即还需要输出该
子序列的第一个和最后一个元素。
Input
测试输入包含若干测试用例,每个测试用例占2行,第1行给出正整数K( < 10000 ),第2行给出K个整数,中间用空格分隔。当K为0时,输入结束,该用例不被处理。
Output
对每个测试用例,在1行里输出最大和、最大连续子序列的第一个和最后一个元
素,中间用空格分隔。如果最大连续子序列不唯一,则输出序号i和j最小的那个(如输入样例的第2、3组)。若所有K个元素都是负数,则定义其最大和为0,输出整个序列的首尾元素。
Sample Input
6
-2 11 -4 13 -5 -2
10
-10 1 2 3 4 -5 -23 3 7 -21
6
5 -8 3 2 5 0
1
10
3
-1 -5 -2
3
-1 0 -2
0
Sample Output
20 11 13
10 1 4
10 3 5
10 10 10
0 -1 -2
0 0 0
代码
#include<stdio.h>#include<string.h>int a[10010];int main(){ int n,i,s; while(~scanf("%d",&n)) { if(n==0) break; memset(a,0,sizeof(a)); int q=0; for(i=0;i<n;i++) { scanf("%d",&a[i]); if(a[i]<0) q++; } s=-1; int k,j,t,sum=-1;//注意初始化sum为负数 for(i=0;i<n;i++) { if(s<0) { s=0; k=i; } s=s+a[i]; if(sum<s) { sum=s; j=i; t=k; } } if(q==n)//全为负数 printf("%d %d %d\n",0,a[0],a[n-1]);//sum为0题目要求 else printf("%d %d %d\n",sum,a[t],a[j]); } return 0;}
发表评论
最新留言
能坚持,总会有不一样的收获!
[***.219.124.196]2025年04月29日 04时43分07秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
Flex 布局的自适应子项内容过长导致其被撑大问题
2021-05-12
PL/SQL 动态Sql拼接where条件
2021-05-12
Lua-table 一种更少访问的安全取值方式
2021-05-12
虚函数
2021-05-12
斐波那契数列两种算法的时间复杂度
2021-05-12
【自学Flutter】4.1 Material Design字体图标的使用(icon)
2021-05-12
【换行符】什么时候用cin.get()吃掉输入流中的换行符
2021-05-12
【二叉树】已知后序与中序求先序
2021-05-12
解决Nginx 404 not found问题
2021-05-12
广东外语外贸大学第三届网络安全大赛Writeup
2021-05-12
VS中 fatal error LNK1123: 转换到 COFF 期间失败 的解决方法
2021-05-12
Course Schedule II
2021-05-13
C#中文转换成拼音
2021-05-13
SpringBoot使用RedisTemplate简单操作Redis的五种数据类型
2021-05-13
移动端事件
2021-05-13
spring-day01
2021-05-13
抖音发布黄金时间段,抖音上热门最佳时间
2021-05-13
Thymeleaf sec:authorize 标签不生效
2021-05-14
Iterable与Iterator
2021-05-14