複雜度1 最大子列和問題 --C語言學習種種
阿新 • • 發佈:2019-01-24
01-複雜度1 最大子列和問題 (20分)
給定K個整陣列成的序列{ N1, N2, ..., NK },“連續子列”被定義為{ Ni, Ni+1, ..., Nj },其中 1≤i≤j≤K。“最大子列和”則被定義為所有連續子列元素的和中最大者。例如給定序列{ -2, 11, -4, 13, -5, -2 },其連續子列{ 11, -4, 13 }有最大的和20。現要求你編寫程式,計算給定整數序列的最大子列和。
輸入格式:
輸入第1行給出正整數K (≤100000);第2行給出K個整數,其間以空格分隔。
輸出格式:
在一行中輸出最大子列和。如果序列中所有整數皆為負數,則輸出0。
輸入樣例:
6
-2 11 -4 13 -5 -2
輸出樣例:
20
#include <stdio.h> int MaxSum(int a[],int n); int main() { int a[100000]; long n; int i=0; int rs; scanf("%d",&n); for(i;i<n;i++){ scanf("%d",a+i); } rs=MaxSum(a,n); printf("%d",rs); } int MaxSum(int a[],int n){ int thisSum=0; int maxSum=0; int j=0; for(j;j<n;j++){ thisSum+=a[j]; // printf("%d",thisSum); if(thisSum>maxSum){ maxSum=thisSum; }else if(thisSum<0){ thisSum=0; } } return maxSum; }
1.讀取陣列問題
for(i;i<n;i++){
scanf("%d",a+i);
}
此時a就是陣列名,a+i就是平時所說的a[i];
待解決問題:當陣列長度未知時的解決
2.函式呼叫過程中陣列的傳遞
int MaxSum(int a[],int n);
int main()
這是函式宣告順序
MaxSum(a,n)這是在函式main方法中呼叫函式,其中a就是陣列名
這兩點是與java不同的
3.另外,這種演算法的複雜度為n
待解決問題:當陣列長度未知時的解決