求一组整数数组中的连续子序列和的最大值

题目:求一组整数数组中的连续子序列和的最大值;如: 4 5 -3 10 -7 3   最大的连续子序列的和为 16 (4+5+(-3)+10),同时响应徐大帅的号召,输入使用文件读入,测试数组放在test.txt中,txt文件不允许修改;程序从test.txt中读取数组,屏幕输出最大的和。

思路:由于算法方面之前已经想好,想法很简单只需遍历数即可(当然是用时间复杂度极高的O(n3))想草草了事。但在文件读取上却花费了很长时间,还是由于代码的基本功不扎实啊。先是考虑怎样从文件中直接定位到数字的起始地址,这还得多亏了百度,原来还有这么美妙的函数可以直接调用就能定位到你想要的位置。呵呵。后是考虑该如何去读取。因为读取的都是字符串,也就是字符变量,就一直在考虑该怎么把字符串转为数字呢。而在不经意间发现了fscanf函数,原来它可以直接转为int型进行读取。这样我的代码就简单多了啊!好了言归正传,代码奉上!

#include <stdio.h>
#include <stdlib.h>

int subsum(int num[],int n)
{
int i,j;
int sum = 0;
int sumMax = num[0];
for (i=0;i<n;i++)
{
sum=0;
for (j=i;j<n;j++)
{
sum+=num[j];
if (sum>sumMax)
sumMax = sum;
}
}
return sumMax;
}

int main(void)
{
FILE* fp;
char count = 0;
int num[12];
int i=0,sumMax;
fp = fopen("test.txt","r+");
if (fp==NULL)
{
printf("test.txt cannot open!\n");
return -1;
}
while (fgetc(fp) != '{')
count++;
fseek(fp,count,SEEK_SET);
while (fgetc(fp) != '}')
fscanf(fp,"%d",&num[i++]);
sumMax = subsum(num,i);
printf("%d\n",sumMax);
return 0;
}



这是我的第一篇博客,如有不妥之处尽情见谅!

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值