递归下降 方法 1126 3295

来源:互联网 发布:网络用语品茶什么意思 编辑:程序博客网 时间:2024/04/30 02:48

http://acm.pku.edu.cn/JudgeOnline/problem?id=1126

http://acm.pku.edu.cn/JudgeOnline/problem?id=3295

 

两道题目很相似,都是对一个字符串进行分析,并得出结果,核心思想使用递归下降的方法

 code 1126

  1. #include<iostream>
  2. #include<string>
  3. using namespace std;
  4. int j(0);
  5. string temp;
  6. int check();
  7. int main()
  8. {
  9.  freopen("in.txt","r",stdin);
  10.  int f;
  11.  while(cin>>temp)
  12.  {
  13.   f=check();
  14.   if(j<temp.size ())//如果调用完后,j<temp.size() 那么就为错
  15.    f=0;
  16.   j=0;
  17.   if(f)
  18.    cout<<"YES"<<endl;
  19.   else
  20.    cout<<"NO"<<endl;
  21.   
  22.  }
  23.  return 0;
  24. }
  25. int check()
  26. {
  27.  int ch=temp[j++];
  28.  switch(ch)
  29.  {
  30.  case 'p':case 'q':case 'r':case 's':case 't':case 'u':case 'v':case 'w':case 'x':case 'y':case 'z':return 1;break;
  31.  case 'I':case  'E':case 'D':case 'C':return check()&check();break;
  32.  case 'N':return check();break;
  33.  default:return 0;
  34.  }
  35. }

code 3295

  1. #include<iostream>
  2. using namespace std;
  3. int check() ;
  4. int j(0);
  5. char temp[201];
  6. short v[200]={0};
  7. int main()
  8. {
  9.     freopen("in.txt","r",stdin);
  10.      int p,q,r,s,t,f(1);
  11.     while(cin>>temp&&temp[0]!='0')
  12.     {
  13.         f=1;
  14.         j=0;
  15. //对32 种情况的枚举
  16.         for( p=0; p<=1&&f; p++)
  17.             for( q=0; q<=1&&f; q++)
  18.                 for(r=0; r<=1&&f; r++)
  19.                     for(s=0; s<=1&&f; s++)
  20.                         for( t=0; t<=1&&f; t++)
  21.                         {
  22.                             v['p'-'0']=p;
  23.                             v['q'-'0']=q;
  24.                             v['r'-'0']=r;
  25.                             v['s'-'0']=s;
  26.                             v['t'-'0']=t;
  27.                             j=0;
  28.                                 f=check();
  29.                                 if(f==0)
  30.                                 {
  31.                                     cout<<"not"<<endl;
  32.                                     break;
  33.                                 }
  34.                         
  35.                         }
  36.                         if(f)
  37.                             cout<<"tautology"<<endl;
  38.     }
  39.     return 0;
  40. }
  41. int check() { 
  42.     int ch=temp[j++];
  43.     switch(ch) { 
  44.         case 'p':case 'q':case 'r':case 's'case 't':return v[ch-'0']; break;
  45.         case 'K'return check() & check(); break;
  46.         case 'A'return check() | check(); break;
  47.         case 'N'return !check();break;
  48.         case 'C'return !check()|check();break;
  49.         case 'E':return  !check() ^ check(); break;
  50.     } 
原创粉丝点击