Online JudgeProblem SetAuthorsOnline ContestsUser
Web Board
Home Page
F.A.Qs
Statistical Charts
Problems
Submit Problem
Online Status
Prob.ID:
Register
Update your info
Authors ranklist
Current Contest
Past Contests
Scheduled Contests
Award Contest
User ID:
Password:
  Register

请教

Posted by deep_you at 2005-07-29 09:43:19 on Problem 2295
我已经考虑到:
1.-X在最先
2.没有X
3.1+-X
4.当结果是负数时候,我是这样处理的:printf("%d",(int)(answer-0.99999999))

我是用一个函数计算两边的X系数和常系数,分别存入A[][0],A[][1]
然后比较两边
if(A[0][0](第一个零代表是左边半边,1代表右边)==A[1][0]) 
      if(A[1][0]==A[1][1])IDENTITY;
      else if(A[1][0]!=A[1][1])IMPOSIBBLE
可是现在还是WA,不知道是不是我遗漏了什么,或者什么地方表述错误,希望高手帮助,我已经卡在这里太长了.
程序如下
#include <stdio.h>
char str1[300],str2[300],str[300];
int a[2][2],d[2];

void find(char *str,int i)
{
	int p=0,p1=0,num,kind;
	while(str[p])
	{
		num=0;
		kind=1;
		while(str[p1]=='+'||str[p1]=='-')p1++;//跳过所有的运算符号
		while(str[p1]!='+'&&str[p1]!='-'&&str[p1]!='\0')//寻找下个运算符号出现前的系数和X
		{
			if(str[p1]=='x')
			{
				if(p1-1>=0)//如果X前面没有系数或者前面超界,则NUM=1;
				{
					if(!(str[p1-1]<='9'&&str[p1-1]>='0'))num=1;
				}
				else if(p1-1<0)num=1;
				p1++;
				kind=0;
				break;
			}
			num=num*10+str[p1]-'0';
			p1++;
		}
		if((str[p]=='+'&&str[p+1]=='-')||(str[p]=='-'&&str[p+1]=='+'))
		{
			d[kind]=-1;
			p=p1;
			p1++;
		}
		else if(str[p]=='+'||str[p]!='-')
		{
			d[kind]=1;
			p=p1;
			p1++;
		}
		else if(str[p]=='-')
		{
			d[kind]=-1;
			p=p1;
			p1++;
		}
		a[kind][i]+=num*d[kind];
	}
}

void main()
{
	int n,i,p,p1,p2,real;
	float answer;
	scanf("%d",&n);
	getchar();
	for(i=0;i<n;i++)
	{
		a[0][0]=a[1][0]=a[0][1]=a[1][1]=d[0]=d[1]=0;//X的系数是A[0][0]和A[0][1],常系数是A[1][0]和A[1][1]
		gets(str);
		p=p1=p2=0;
		real=0;
		while(str[p])
		{
			if(str[p]=='=')
			{
				str1[p1]='\0';
				real=1;
				p++;
				continue;
			}
			if(real==0)str1[p1++]=str[p++];
			if(real==1)str2[p2++]=str[p++];
		}
		str2[p2]='\0';
		find(str1,0);
		find(str2,1);
		if(a[0][0]==a[0][1])
		{
			if(a[1][0]==a[1][1])printf("IDENTITY\n");
			if(a[1][0]!=a[1][1])printf("IMPOSSIBLE\n");
		}
		else
		{
			answer=(float)(a[1][1]-a[1][0])/(a[0][0]-a[0][1]);
			if(answer<0)printf("%d\n",(int)(answer-0.99999999999));
			else printf("%d\n",(int)answer);
		}
	}

}




Followed by:

Post your reply here:
User ID:
Password:
Title:

Content:

Home Page   Go Back  To top


All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator