View Code of Problem 19

#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.


Back to problem 19