一個有 N個元素的整型數組,求該數組的各個子數組中,子數組之和的最大值是多少? 例如數組 a[6]={-2,5,3,-6,4,-8,6};則子數組之和的最大值是 8(即 a[1]+a[2])。

一個有 N個元素的整型數組,求該數組的各個子數組中,子數組之和的最大值是多少? 例如數組 a[6]={-2,5,3,-6,4,-8,6};則子數組之和的最大值是 8(即 a[1]+a[2])。

更多資料請點擊:我的目錄

方法一:

#include <stdio.h>

int i ,j , N,max;

int main()
{
	printf("請輸入數組大小:");
	scanf("%d",&N);
	int arr[N];
	int sum[100];
	int max = 1;
	printf("請輸入數組各項數值):\n");
	for( i = 0; i < N; i++)
	{	
		scanf("%d",&arr[i]);
	}
	int *p = arr;									//定義一個指針指向數組arr

	for( i = 0; i < N; i++)
	{
		int s = 0;									//每次sum相加結束後。初始化爲0
		for( j = 0; j < N-i; j++)
		{
			s += *(p+i+j);							//將各項元素相加
			sum[j] = s;
			max = max > sum[j] ? max : sum[j];		//求最大值,賦給全局變量max
		}	
	}
	printf("\n%d\n",max);							//輸出最大值
}

方法二:

#include <stdio.h>

int main()
{	
	int i = 0 , j = 0, N;
	int a[20] = {0};
	printf("求子數組之和的最大值:\n請輸入數組的項數:");
	scanf("%d",&N);
	printf("請輸入數組各項的值:");
	for(i = 0; i < N; i++)
	{
		scanf("%d",&a[i]);
	}
		
	int max[] = {0};
	int sum = 0 , max_numb = 0;

	for(i = 0; i < N;i++)
	{
		sum = sum + a[i];
		if(sum < 0)
		{
			max[j] = sum - a[i];
			max_numb = max_numb > max[j] ? max_numb : max[j];
			j++;
			sum = 0;
		}
		else
		{
			max[j] = sum;
			max_numb = max_numb > max[j] ? max_numb : max[j];
			j++;
		}
	}
	printf("子數組之和的最大值: max_numb == %d\n",max_numb);
	return 0;
}

在這裏插入圖片描述
更多資料請點擊:我的目錄

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章