一個有 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;
}
更多資料請點擊:我的目錄