您的位置:首页 > 其它

最大连续子数组问题-homework-01

2013-09-20 00:55 253 查看
1)先写我的 github 的介绍:

github 的域名:http://www.github.com/zhuifeng1022

登入 github 大概是下面的视图:



按照助教的方法:我已经建好了代码仓库:命名为 homework-01

代码仓库 homework-01 域名: http://www.github.com/zhuifeng1022/homework-01
2)我选择的教材:中文版 代码大全 (第二版) 斯蒂夫·迈克康奈尔



以下是第一次作业:

  我在课上想到的一种算法设计:

#include<stdio.h>
int max(int *a, int n)
{
int i, j;
int high, low;
int max, sum;
for (i = 0, max = 0; i < n; i++)
max = max + a[i];
sum=0;
for (i = 0; i < n; i++)
{
for(j = 0;j < n; j++)
{
for(sum = 0, low = i, high = j; low <= high; low++)
{
sum = sum + a[low];
if(sum > max)
max = sum;
}
}
}
return max;
}

int main()
{
int a[999];
int i, n;
FILE *in;
in = fopen("data.in", "r");
fscanf(in, "%d", &n);
for (i = 0; i < n; i++)
fscanf(in, "%d", &a[i]);
printf("%d\n", max(a, n));
fclose(in);
return 0;

}


课后经过和同学的讨论,我又实现了另外一种O(n)的算法:

#include<stdio.h>
int max(int *a, int n)
{
int i;
int max, sum;
for (i = 0; i < n; i++)
{
if (a[i] < max)
max = a[i];
}
sum = 0;
for (i = 0; i < n; i++)
{
sum += a[i];
if(sum > max)
max = sum;
if (sum < 0)
sum = 0;
}
return max;
}

int main()
{
int a[999];
int i, n;
FILE *in;
in = fopen("data.in", "r");
fscanf(in, "%d", &n);
for (i = 0; i < n; i++)
fscanf(in, "%d", &a[i]);
printf("%d\n", max(a, n));
fclose(in);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: