现在的位置: 首页 > 综合 > 正文

xmu 1312求导 WA什么状况修改后运行超时

2013年10月16日 ⁄ 综合 ⁄ 共 2196字 ⁄ 字号 评论关闭
#include<stdio.h>
#include<string.h>
#include<ctype.h>
int main()
{
//	freopen("1.txt","r",stdin);
	int a[1001],t1,t2,flag=0,f=0;
	int i=0,n;
	char c[1001],temp,buf[1000];
	memset(a,0,sizeof(a));
	memset(buf,0,sizeof(buf));
	fgets(buf,1000,stdin);
	n=strlen(buf);
	while(i<n-1)
	{
		t1=0;
		t2=0;
		if(buf[i]=='-')
		{
			temp='-';
			i++;
		}
		else if(buf[i]=='+')
		{
			temp='+';
			i++;
		}
		else
			temp='+';
		if(buf[i]=='0')		
		{
			i++;
			while(buf[i]=='0')
				i++;
			if(!isdigit(buf[i]))
			{
				while(buf[i]!='+'&&buf[i]!='-'&& i!=n-1)
					i++;
				continue;
			}
		}
		while(isdigit(buf[i]))
		{
			t1=t1*10+(buf[i]-'0');
			i++;
		}
		if(t1==0)
			t1=1;	
		if(buf[i]=='x')
		{
			i++;
			if(buf[i]=='^')
			{
				i++;
				while(isdigit(buf[i]))
				{
					t2=t2*10+(buf[i]-'0');
					i++;
				}
				if(temp=='+')
					a[t2]+=t1;
				if(temp=='-')
					a[t2]-=t1;
			}
			else
			{
				if(temp=='+')
					a[1]+=t1;
				if(temp=='-')
					a[1]-=t1;
			}		
		}
		else
			continue;
	
	}

	for(i=1;i<=1000;i++)
	{
		if(a[i]!=0)
		{
			a[i-1]=a[i]*i;
			a[i]=0;
		}                                                                                                                                                                

	}
	for(i=0;i<1000;i++)
		if(a[i]!=0)
		{
			f=1;
			break;
		}
	for(i=1000;i>=0;i--)
	{
		if(f==0)
		{
			printf("%d",f);
			break;
		};

		if(a[i]!=0)
		{
			
			if(flag==0 &&a[i]>0)
			{
				flag=1;
			}
			else
			{
				if(a[i]>0)
					putchar('+');
				flag=1;
			}
			if(a[i]==-1)
				putchar('-');
			else if(a[i]!=1)
				printf("%d",a[i]);
			if(i==0)
				break;
			putchar('x');
			if(i>1)
			{
				putchar('^');
				printf("%d",i);
			}
		}
	}
	putchar('\n');
}



修改后运行超时
#include<stdio.h>
#include<string.h>
#include<ctype.h>
int main()
{
//	freopen("1.txt","r",stdin);
	int a[1001],b[10],t1,t2,flag=0,f=0;
	int i=0,j,n;
	char c[1001],temp,buf[1000];
	memset(a,0,sizeof(a));
	memset(b,-1,sizeof(b));
	memset(buf,0,sizeof(buf));
	fgets(buf,1000,stdin);
	n=strlen(buf);
	while(i<n-1)
	{
		t1=0;
		t2=0;
		if(buf[i]=='-')
		{
			temp='-';
			i++;
		}
		else if(buf[i]=='+')
		{
			temp='+';
			i++;
		}
		else
			temp='+';

			
		if(buf[i]=='0')		
		{
			i++;
			while(buf[i]=='0')
				i++;
			if(!isdigit(buf[i]))
			{
				while(buf[i]!='+'&&buf[i]!='-'&& i!=n-1)
					i++;
				continue;
			}
		}
		while(isdigit(buf[i]))
		{
			t1=t1*10+(buf[i]-'0');
			i++;
		}
		if(t1==0)
			t1=1;	
		if(buf[i]=='x')
		{
			i++;
			if(buf[i]=='^')
			{
				i++;
				while(isdigit(buf[i]))
				{
					t2=t2*10+(buf[i]-'0');
					i++;
				}
				if(temp=='+')
					a[t2]+=t1;
				if(temp=='-')
					a[t2]-=t1;
			}
			else
			{
				if(temp=='+')
					a[1]+=t1;
				if(temp=='-')
					a[1]-=t1;
			}		
		}
		else
			continue;
	
	}

	for(j=0,i=1;i<=1000;i++)
	{
		if(a[i]!=0)
		{
			f=1;
			b[j++]=i-1;
			a[i-1]=a[i]*i;
			a[i]=0;
		}                                                                                                                                                                

	}
	if(f==0)
		printf("%d",f);
	else
	{
		for(i=9;i>=0;i--)
		{
			if(b[i]!=-1)
			{
				
				if(flag==0 &&a[b[i]]>0)
				{
					flag=1;
				}
				else
				{
					if(a[b[i]]>0)
						putchar('+');
					flag=1;
				}
				if(a[b[i]]==-1)
					putchar('-');
				else
					printf("%d",a[b[i]]);
				if(b[i]==0)
					break;
				putchar('x');
				if(b[i]>1)
				{
					putchar('^');
					printf("%d",b[i]);
				}
			}
		}
	}
	
	putchar('\n');
}


【上篇】
【下篇】

抱歉!评论已关闭.