#include #define MAX(a,b) (((a) > (b)) ? (a) : (b)) #define MAX_N 10000 int a[MAX_N+1]; /* zadaná posloupnost */ int s[MAX_N+1]; /* posloupnost částečných součtů */ int m[MAX_N+1]; /* pomocná posloupnost */ int N; int main(void) { int i,j; int left,right; /* hranice zatím nejlepšího úseku */ printf("N:"); scanf("%d",&N); a[0]=s[0]=0; for (i=1;i<=N;i++) { printf("%d. člen:",i);scanf("%d",a+i); /* načtení zadané posloupnosti */ s[i]=s[i-1]+a[i]; /* vytvoření posloupnosti částečných součtů */ } m[N]=s[N]; for (i=N-1;i>=1;i--) m[i]=MAX(m[i+1],s[i]); /* vytvoření pomocné posloupnosti */ left=0;right=0; for (i=j=0;js[i]) j++; /* najdeme novou pravou hranici */ if (j-i < right-left || s[j]-s[i] < s[right]-s[left]) continue; /* kratší nebo s menším součtem */ left=i; right=j; } if (left-right) { printf("Hledaný úsek délky %d je ",right-left); for (i=left+1;i<=right;i++) printf("%d ",a[i]); putchar('\n'); } else printf("Žádný hledaný úsek neexistuje.\n"); return 0; }