#include <stdio.h> #include <malloc.h> struct node { int date; struct node *next; }; struct node * creat_list(int m,int *k,int *g) { int i,num,t; struct node *head,*p,*q; head = q = NULL; *g = 0; for(i = 1; i <= m; ++i) { scanf("%d",&num); if(num != 0) { if(num < 0) { if(*g == 0) *g = num; else { if(*g < num) *g = num; } } if(q == NULL) { p = (struct node *)malloc(sizeof(struct node)); t = num; p->date = num; p->next = NULL; head = q = p; } else { if(t * num > 0) { q->date = q->date + num; t = num; } else if(t * num < 0) { p = (struct node *)malloc(sizeof(struct node)); p->date = num; p->next = NULL; q->next = p; q = p; t = num; } } } else ++(*k); } return head; } int add_list(struct node *head,int k,int g) { struct node *p,*q; int a,b,sum; for(p = head; p != NULL; p = p->next) if(p->date > 0) break; if(p == NULL) { if(k == 0) return g; else if(k > 0) return 0; } a = p->date; b = a; while(p) { p = p->next; if(p) { sum = b + p->date; if(sum <= 0) { p = p->next; if(p) { b = p->date; if(a > b) a = a; else a = b; } } else if(sum > 0) { p = p->next; if(p) { sum = sum + p->date; //此时为一个p->date正值 if(a > sum) a = a; else a = sum; b = sum; } } } } return a; } int main() { int m,i,f,k,g; k = 0; struct node *head; scanf("%d",&m); while(m != 0) { head = creat_list(m,&k,&g); f = add_list(head,k,g); printf("%d\n",f); scanf("%d",&m); } return 0; } |
Double click to view unformatted code.