随笔 - 40, 文章 - 0, 评论 - 19, 引用 - 0
数据加载中……

PKU 3337 Expression Evaluator

这个题目A的很傻,一次接入三个字符,然后自己不停的来处理各种情况的效果,呵呵,各种格式是应该注意的,空格算是小陷阱?呵呵,所以一般复制那个sample再改就好了,freopen("a.in","r",stdin);freopen("a.out","w",stdout);这种文件读入读出的方式对观察自己的输出结果很有好处,推荐使用防止PE,呵呵,也许是北大的数据比较弱,这个同样的题目在天大的OJ就过不了~WA的很郁闷。。。
  1Source Code
  2
  3Problem: 3337  User: hongtaozhy 
  4Memory: 296K  Time: 0MS 
  5Language: G++  Result: Accepted 
  6
  7Source Code 
  8#include<stdio.h>
  9#include<string.h>
 10char res[10000];
 11char fes[10000];
 12char zd[26]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26};
 13bool mark[26];
 14int main(){
 15    int n;
 16    int sum;
 17    int key ;
 18    //freopen("g.in","r",stdin);
 19    //freopen("gg.in","w",stdout);  
 20    scanf("%d\n",&n);
 21    int len ;    
 22    while(n--){
 23        key = 0 ;
 24    memset(mark,0,sizeof(mark));       
 25     for(int i = 0 ;i < 26 ; i++ )
 26     zd[i]=i+1;
 27               
 28    sum = 0 ;
 29    gets(fes);
 30    printf("Expression: %s\n",fes);
 31    
 32    
 33    len =  strlen ( fes );
 34    int t = 0 ;
 35    for(int i = 0 ;i < len ; i++ ){
 36    if(fes[i]!=' ') res[t++]=fes[i];
 37    if(fes[i]=='\0')               { res[t++]=0;res[t++]=0;}
 38    }

 39  //   printf("%s\n",res);
 40    len = strlen ( res );
 41    forint i = 0 ; i < len ; i++ ){
 42         if(res[i]<='z'&&res[i]>='a'&&res[i+1]==res[i+2]){
 43             if(key == 0)
 44             sum += zd[res[i]-'a'];
 45             else 
 46             sum -= zd[res[i]-'a'];
 47             if(res[i+1]=='-')
 48             zd[res[i]-'a']--;
 49             else if(res[i+1]=='+')
 50             zd[res[i]-'a']++;
 51             mark[res[i]-'a']=1;
 52           
 53             i+=2;
 54             continue;
 55         }

 56         else if(res[i+2]<='z'&&res[i+2]>='a'&&res[i+1]==res[i]){           
 57             if(res[i+1]=='-')
 58             zd[res[i+2]-'a']--;
 59             else if(res[i+1]=='+')
 60             zd[res[i+2]-'a']++;
 61             if(key == 0)
 62             sum += zd[res[i+2]-'a'];
 63             else 
 64             sum -= zd[res[i+2]-'a'];
 65             mark[res[i+2]-'a']=1;
 66          
 67              i+=2;
 68             continue;
 69         }

 70         else  if(res[i]<='z'&&res[i]>='a'){
 71       
 72             if(key == 0)
 73             sum += zd[res[i]-'a'];
 74             else 
 75             sum -= zd[res[i]-'a']; 
 76             mark[res[i]-'a']=1;
 77             if(res[i+1]=='+')                 key=0;
 78             else key=1;
 79         }

 80         else if(res[i]=='-'&&res[i+1]=='-'&&res[i+2]=='+')
 81         key=0;
 82         else if(res[i]=='+'&&res[i+1]=='+'&&res[i+2]=='-')
 83         key=1;
 84         else if(res[i]=='-'&&res[i+1]=='+'&&res[i+2]=='+')
 85         key=1;
 86         else if(res[i]=='+'&&res[i+1]=='-'&&res[i+2]=='-')
 87         key=0;
 88         else if(res[i]=='+'&&res[i+1]<='z'&&res[i+1]>='a')
 89         key=0;
 90         else if(res[i]=='-'&&res[i+1]<='z'&&res[i+1]>='a')
 91         key=1;
 92         else if(res[i]=='+'&&res[i+1]=='+'&&res[i+2]=='+')
 93         key=0;
 94         else if(res[i]=='-'&&res[i+1]=='-'&&res[i+2]=='-')
 95         key=1;
 96    }

 97        
 98        
 99   printf("value = %d\n",sum);
100   for(int i = 0 ; i < 26 ; i ++ ){
101    if(mark[i]!=0)
102    printf("%c = %d\n",i+'a',zd[i]);
103    }

104    }

105 //   while(1);
106return 0 ; 
107}

108
109

posted on 2008-07-18 22:45 hadn't 阅读(217) 评论(0)  编辑 收藏 引用


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理