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

那位高手帮看看,不知为什么总是wa

Posted by jsjhoubo at 2007-08-10 22:15:46 on Problem 3337
#include<stdio.h>
#include<stdlib.h>
#include<string.h>

struct aaa{
	int var;
	int stat;
}stack[29];
char op[10000];
char str[10000];
int var[26];
bool flag[26];
bool ff[10000];
int evaluator()
{
	int i=0,j,sum;
	int count=0;
	int len,len1,len2;
	while(str[i]!='\0')
	{
		if(str[i]==' ')		
		{
			i++;
			continue;
		}
		str[count++]=str[i++];
	}
	str[count]='\0';
	len=count;
	count=0;
	i=0;
	while(str[i]!='\0')
	{
		if(str[i]>='a' && str[i]<='z')
		{
			flag[str[i]-'a']=true;
			if(i-1 >=0 && str[i-1]=='-' && i-2 >=0 && str[i-2]=='-')
			{
				stack[count].var=str[i]-'a';
				var[stack[count].var]--;
				stack[count].stat=0;
				ff[i]=true;
				ff[i-1]=true;
				ff[i-2]=true;
			}
			else if(i+1 <len && str[i+1]=='-' && i+2 <len && str[i+2]=='-')
			{
				stack[count].var=str[i]-'a';
				stack[count].stat=1;
				ff[i]=true;
				ff[i+1]=true;
				ff[i+2]=true;
			}
	        else if(i-1 >=0 && str[i-1]=='+' && i-2 >=0 && str[i-2]=='+')
			{
				stack[count].var=str[i]-'a';
				stack[count].stat=3;
				var[stack[count].var]++;
				ff[i]=true;
				ff[i-1]=true;
				ff[i-2]=true;
			}
			else if(i+1 <len && str[i+1]=='+' && i+2 <len && str[i+2]=='+')
			{
				stack[count].var=str[i]-'a';
				stack[count].stat=4;
				ff[i]=true;
				ff[i+1]=true;
				ff[i+2]=true;
			}		
			else
			{
				stack[count].var=str[i]-'a';
				stack[count].stat=2;
				ff[i]=true;
			}
			count++;
		}
		i++;
	}
	len1=count;
	i=0;
	count=0;
	while(str[i]!='\0')
	{
		if(!ff[i])
			op[count++]=str[i];
		i++;
	}
	len2=count;
	j=0;
	sum=var[stack[0].var];
	if(len2==len1)
	{
		if(op[0]=='-')
			sum=-sum;
		j=1;
	}
	if(stack[0].stat==1)
		var[stack[0].var]--;
	else if(stack[0].stat==4)
		var[stack[0].var]++;
	for(i=1;i<len1;i++,j++)
	{
		if(op[j]=='+')
			sum+=var[stack[i].var];
		else
			sum-=var[stack[i].var];
		if(stack[i].stat==1)
			var[stack[i].var]--;
		else if(stack[i].stat==4)
			var[stack[i].var]++;
	}
	return sum;
}
int main()
{	
	int test,i;
	char ch;
	scanf("%d",&test);
	ch=getchar();
	while(test>0)
	{
		for(i=0;i<26;i++)
			var[i]=i+1;
		memset(flag,false,sizeof(flag));
		ch=getchar();
		i=0;
		while(ch!='\n')
		{
			str[i++]=ch;
			ch=getchar();
		}
		printf("Expression: %s\nvalue = ",str);
		printf("%d\n",evaluator());
		for(i=0;i<26;i++)
			if(flag[i])
				printf("%c = %d\n",i+'a',var[i]);
		test--;
	}
	return 0;
}

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