关于相邻数的问题,求c语言大神帮忙编程啊!C语言编程:输入一列数,输出这列数相邻数的最大和.所谓相邻数最大和,就是在它们的和在所有相邻数的和中是最大的,而我们就需要将这段相邻数
来源:学生作业帮助网 编辑:六六作业网 时间:2024/12/24 13:57:01
关于相邻数的问题,求c语言大神帮忙编程啊!C语言编程:输入一列数,输出这列数相邻数的最大和.所谓相邻数最大和,就是在它们的和在所有相邻数的和中是最大的,而我们就需要将这段相邻数
关于相邻数的问题,求c语言大神帮忙编程啊!
C语言编程:输入一列数,输出这列数相邻数的最大和.所谓相邻数最大和,就是在它们的和在所有相邻数的和中是最大的,而我们就需要将这段相邻数找出来.
格式为先输入一个数N,这个数为输入数的个数.接着,输入N个数.最后,输出这列数的相邻数的最大和以及相邻数的起始位置和结束位置.
例如:如果这列数为:1,2,3,4,5,则他们的相邻数最大和为:1+2+3+4+5=15,起始位置为1,
结束位置为5;
如果这列数为:27,6,-50,21,-3,14,16,-8,42,33,-21,9,则相邻数最大和为:
21+(-3)+14+16+(-8)+42+33=115,起始位置为:4,结束位置为:10
输入示例:
5
1 2 4 3 -4
输出示例:
10
起始位置为1
结束位置为4
(下面几个指标,如果力所能及可以尝试)
提高:
能考虑到多种可能出现的情况,包括用户自己可能犯的错误.对于错误能自动报错.
挑战:不输入数据的个数(不需要N这个数据就能工作)且输入的数据不限制,能输入任意个数的数.
关于相邻数的问题,求c语言大神帮忙编程啊!C语言编程:输入一列数,输出这列数相邻数的最大和.所谓相邻数最大和,就是在它们的和在所有相邻数的和中是最大的,而我们就需要将这段相邻数
#include <stdio.h>
#include <string.h>
long long max(long long a, long long b)
{
return a > b?a:b;
}
int main()//原题,数据范围最大支持2^63 - 1 -> -2^63
{
long long maxn = 0, sum = 0, maxi = 1LL<<63, a;
int n;
scanf("%d",&n);
while(n--)
{
scanf("%lld",&a);
maxi = max(maxi, a);
sum += a;
if (sum < 0)
sum = 0;
maxn = max(maxn, sum);
}
if (maxi < 0)
printf("%lld\n",maxi);
else
printf("%lld\n",maxn);
return 0;
}
int run()//提高部分,结束的时候需要文件结束符
{
long long maxn = 0, sum = 0, maxi = 1LL<<63, a;
while(scanf("%lld",&a) != -1)
{
maxi = max(maxi, a);
sum += a;
if (sum < 0)
sum = 0;
maxn = max(maxn, sum);
}
if (maxi < 0)
printf("%lld\n",maxi);
else
printf("%lld\n",maxn);
return 0;
}