【c语言】输入一组整数,求出最大子序列的和

//  输入一组整数,求出最大子序列的和.

//  例如:序列: - 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));//20

	printf("%d\n", Max_Son(array, lena));//16

	return 0;

}

<img src="http://img.blog.csdn.net/20150706204700829?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" />

 

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-12-24 10:52:53

【c语言】输入一组整数,求出最大子序列的和的相关文章

【C语言】输入一组整数,求出这组数字子序列和中最大值

//输入一组整数.求出这组数字子序列和中最大值 #include <stdio.h> int MAxSum(int arr[],int len) { int maxsum = 0; int i; int j; for (i = 0; i < len; i++) { int thissum = 0; for (j = i; j < len; j++) { thissum += arr[j]; if (thissum>maxsum) maxsum = thissum; } } r

输入一组整数,求子数组和的最大值。(数组进行首尾相接之后)

输入一组整数,求子数组和的最大值. 题目:返回一个一维整数数组中最大子数组的和. 要求: 输入一个一维整形数组,数组里有正数也有负数. 一维数组首尾相接,象个一条首尾相接带子一样. 数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和. 求所有子数组的和的最大值. ? 10 -9 8 7 -5 3 ? i : 4 3 2 1 0 ? nALL : 3 3 7 15 15 16 ? nStart: 3 -2 7 15 6 16 ? nStart = max(arr[i], arr[i]+

关于输入一组数据求最小的问题

问题链接: http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1350 http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1408 两个问题,自己第一个代码是没有敲出来的,第二个代码虽然是搞定了, 但是在处理是分析不清楚,使用了两个for循环,导致时间上相对于别人的代码有很大的差距. 自己AC的1408: #include <iostream> #include <algorithm>

剑指Offer(Java版)第四十题:在数组中的两个数字,如果前面一个数字大于后面的数字, 则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数P。 并将P对1000000007取模的结果输出。 即输出P%1000000007

/*在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对.输入一个数组,求出这个数组中的逆序对的总数P.并将P对1000000007取模的结果输出. 即输出P%1000000007 */ import java.util.*; public class Class40 { public int InversePairs(int[] array){ int length = array.length; int P = 0; for(int i = 0; i < lengt

[C语言]输入一行整数,用空格分开,回车结束。

在屏幕一行中的字符会保留在缓冲区,例如 1 2 3 4 5 6 scanf把1读入存入数组中,getchar把空格读入,以此往后遍历.所以我们只需判断getchar()得到的是否是'\n'即可. for( i = 0; i < n; i++) { scanf("%d",&cur); array[i] = cur; char c = getchar(); if (c == '\n') { break; } } 刚入坑的编程新手,有错欢迎指正批评. 谢谢~ 原文地址:http

(4)C语言——求最大连续子序列和

题目: 输入一组整数,求出这组数字子序列和中最大值.也就是只要求出最大子序列的和,不必求出最大的那个序列.例如: 序列:-2 11 -4 13 -5 -2,则最大子序列和为20. 序列:-6 2 4 -7 5 3 2 -1 6 -9 10 -2,则最大子序列和为16. 1. 1 /* 2 算法一:穷举法(3个for) 3 时间复杂度:O(n^3) 4 5 */ 6 #include <stdio.h> 7 #include <malloc.h> 8 9 int Max = 0; 1

C语言:输入一个数,输出比这个数小的所有素数,并求出个数。

//C语言:输入一个数,输出比这个数小的所有素数,并求出个数. 1 #include<conio.h> 2 #include<stdio.h> 3 #include<stdlib.h> 4 #define MAX 100 5 int fun(int lim, int aa[MAX]) 6 { 7 int i, j,k=0; 8 for (i = 2; i <= lim; i++)//罗列每个数 9 { 10 for (j = 2; j < i; j++)//

【C语言】输入一个整数,求它的原码,反码,补码值

1 #include<stdio.h> 2 #include<math.h> 3 int main() 4 { 5 int m,n,a[10],i=0,y[100],f[100],b[100],j,k; 6 printf("请输入一个整数:"); 7 scanf("%d",&n); 8 m=abs(n); 9 while (m!=0) 10 { 11 a[i]=m%2; 12 m=m/2; 13 i=i+1; 14 } 15 if (

求出10个整数中的最大值

//求出10个整数中的最大值#include <stdio.h>int main(){ int arr[10];//定义存放10个整数的数组 int i; int tmp;//定义中间变量 printf("请输入10个整数:\n"); for(i=0;i<10;i++)//数组的初始化 {  scanf("%d",&arr[i]); } for(i=0;i<10;i++)//寻找10个整数中的最大值 {  if(arr[0]<=