最近在MOOC大學學習浙大的數據結構,也跟着課件做了PTA的試題。
總結下編程題第二題<01-複雜度2 Maximum Subsequence Sum>
原題如下:
第一次提交:
測試點2:並列和對應相同i但是不同j,即尾是0
起初沒理解什麼意思,誤以爲是子序列最後一個0不取,如下:
10
-1 0 1 2 3 4 0 -5 -9 -2
10 1 4
卻忘了題目所說的‘output the one with the smallest indices i and j ’(取最小索引i和j)
1 2 3 4 前面的 0 也是要取的,正確如下:
10
-1 0 1 2 3 4 0 -5 -9 -2
10 0 4
0和4才使i、j最小。
最後ACE代碼如下:
#include<stdio.h>
void findMax( int a[], int k);
int main(){
int k=0,n,sum=0,max=0;
scanf("%d",&k);
int a[k];
for( n=0; n<k; n++){
scanf("%d",&a[n]);
}
findMax(a, k);
return 0;
}
void findMax( int a[], int k){
int sum=0,max=0,i=-1,j=-1,n,key=1,flag=1,p;
for( n=0; n<k; n++ ){
sum += a[n];
if( a[n] == 0 && max == 0 ){
i = n;
j = n;
}
if( sum < 0 ){
sum = 0;
flag = 1;
}
if( (sum > 0||a[n] == 0) && flag==1){
p = n;
flag = 0;
}
if( sum > max ){
max = sum;
i = p;
j = n;
}
if( a[n] > 0 ){
key = 0;
}
}
if(key&&i<0){
i = 0;
j = k-1;
}
printf("%d ",max);
printf("%d ",a[i]);
printf("%d",a[j]);
return;
}
?代碼可能不是最好的,虛心交流,一起進步!?