【c语言】输入一组整数,求出最大子序列的和
来源:互联网 发布:高颜值零食知乎 编辑:程序博客网 时间:2024/05/22 06:10
输入一组整数,求出最大子序列的和.
例如:序列: - 2 11 - 4 13 - 5 - 2,则最大子序列和为20。
例如:序列: - 2 11 - 4 13 - 5 - 2,则最大子序列和为20。
序列: - 6 2 4 - 7 5 3 2 - 1 6 - 9 10 - 2,则最大子序列和为16
遍历是一种方法:
#include <stdio.h>int Max_Son(int *p, int len){int Max_Sum = 0;int i, j;for (i = 0; i < len; ++i){int sum = 0;for (j = i; j < len; ++j){sum = sum + p[j];if (sum > Max_Sum){Max_Sum = sum;}}}return Max_Sum;}int main(){int arr[] = { -2, 11, -4, 13, -5, -2 };int array[] = { -6, 2, 4, -7, 5, 3, 2, -1, 6, -9, 10, -2 };int len = sizeof(arr) / sizeof(arr[0]);int lena = sizeof(array) / sizeof(array[0]);printf("%d\n", Max_Son(arr, len));//20printf("%d\n", Max_Son(array, lena));//16return 0;}
还有一种思想。联机算法。
重点的一个思想是:如果a[i]是负数那么它不可能代表最大序列的起点,因为任何包含a[i]的作为起点的子序列都可以通过用a[i+1]作为起点来改进。
类似的有,任何的负的子序列不可能是最优子序列的前缀。
#include <stdio.h>#include <assert.h>int Max_Son(int *arr, int len){int Max_Sum = 0;int sum = 0;int j;assert(arr != NULL);for (j = 0; j < len; ++j){sum = sum + arr[j];if (sum > Max_Sum)Max_Sum = sum;else if (sum < 0)sum = 0;}return Max_Sum;}int main(){int arr[] = { -2, 11, -4, 13, -5, -2 };int array[] = { -6, 2, 4, -7, 5, 3, 2, -1, 6, -9, 10, -2 };int len = sizeof(arr) / sizeof(arr[0]);int lena = sizeof(array) / sizeof(array[0]);printf("%d\n", Max_Son(arr, len));//20printf("%d\n", Max_Son(array, lena));//16return 0;}
0 0
- 【c语言】输入一组整数,求出最大子序列的和
- 【C语言】输入一组整数,求出这组数字子序列和中最大值
- 一组整数中求出最大整数序列
- 输入一组整数,输出最大子数列及其和
- 计算一组整数的连续子序列和的最大值
- c语言典例之求n个整数最大连续子序列和
- 求整数序列的最大子序列和
- C语言输入三个整数 找最大的整数
- 算法面试题:求出给定整数组的最大联系子数组的和
- 求一个整数序列的和的最大子串
- 求整数序列的最大子列和
- 求一组整数数组中的连续子序列和的最大值
- 求出int数组中和最大的子序列
- 最大上升子序列-C语言
- C语言实现求数组的子数组之和的最大值并求出最大子数组位置
- 在给定整数序列中,找出最大和的子序列...
- 求一个整数序列的最大子序列和(编程珠玑第八章)
- 最大子序列的和
- android inputType输入类型
- Android之json解析
- 2012年5月SAT香港真题解析
- runtime 运行时机制初步认识
- CAS实现SSO 学习(三)
- 【c语言】输入一组整数,求出最大子序列的和
- Xcode 6 正式版如何创建一个Empty Application
- android浏览器下a/input等元素获得焦点时高亮边框
- 精通JavaScript开发课时13-14(DOM操作应用)笔记
- 让乐视如此优惠电信欢go怎么做到的
- 变压器出现响声 浸漆
- 41 三个数从小到大排序
- android——Socket长连接
- birt报表开发入门