UVa 621 秘密研究

一道水题坑了我~

正常来说,都知道保存为字符串处理。写的时候,发现题目没说字符串最大多长,又不相信这题如此之简单,就用getchar写了,结果就可想而知了。。不知道哪里出了问题~

AC代码把最后一个else if的条件去掉改为else,还是能AC,说明输入中每个串都是能对应一个种类的。这样的话,就暂时不知道getchar()版本错在哪了,有时间再改吧,真是不作死不会死啊~

Code:

#include<stdio.h>
#include<string.h>

int main()
{
 int n;
 scanf("%d",&n);
 char s[1000];
 for(int i=0;i<n;++i)
 {
  scanf("%s",s);
  int len=strlen(s);
  if(strcmp(s,"1")==0||strcmp(s,"4")==0||strcmp(s,"78")==0)
   printf("+\n");
  else if(s[len-1]=='5' && s[len-2]=='3')
   printf("-\n");
  else if(s[0]=='9' && s[len-1]=='4')
   printf("*\n");
  else if(s[0]=='1' && s[1]=='9' && s[2]=='0')
   printf("?\n");       
 }
 return 0;   
} 

没AC的:

//有误,没AC 
#include<stdio.h>

int main()
{
 int n;
 scanf("%d",&n);
 getchar(); 
 for(int i=0;i<n;++i)
 {
  char c=getchar();
  if(c=='1')
  {
   c=getchar();
   if(c=='\n') printf("+\n");
   else if(c=='9' && getchar()=='0')
   {
    int flag=0;
    while((c=getchar())!='\n')
    {
     if(flag==0)
     {
      if(c=='3') flag=1;          
     }                 
     else if(flag==1)
     { if(c=='5') flag=2;}        
     else flag=0;
    }    
    if(flag==2) printf("-\n");
    else printf("?\n");
   }        
   else { while(getchar()!='\n'); printf("-\n");} 
  }
  else if(c=='4')
  {
   if(getchar()=='\n') printf("+\n");
   else { while(getchar()!='\n'); printf("-\n");}    
  }   
  else if(c=='7')
  {
   if(getchar()=='8' && getchar()=='\n') printf("+\n");
   else { while(getchar()!='\n'); printf("-\n");}    
  }
  else if(c=='9')
  {
   bool flag=0;
   while((c=getchar())!='\n')
   {
    if(c=='4') flag=1;                        
    else flag=0;
   }    
   if(flag) printf("*\n");
   else printf("-\n");
  }
  else
  {
   while(getchar()!='\n'); printf("-\n");   
  }
 } 
 return 0;  
}

上面的getcha()版本经修改后AC的:

//修改后AC了 
#include<stdio.h>

int main()
{
 int n;
 scanf("%d",&n);
 getchar(); 
 for(int i=0;i<n;++i)
 {
  char c=getchar();
  if(c=='1')
  {
   c=getchar();
   if(c=='\n') printf("+\n");
   else if(c=='9' && getchar()=='0')
   {
    int flag=0;
    while((c=getchar())!='\n')
    {
     if(flag==0)
     {
      if(c=='3') flag=1;          
     }                 
     else if(flag==1)
     { if(c=='5') flag=2;
       else flag=0;
     }        
     //else flag=0;
    }    
    if(flag==2) printf("-\n");
    else printf("?\n");
   }        
   else { while(getchar()!='\n'); printf("-\n");} 
  }//ifc
  else if(c=='4')
  {
   if(getchar()=='\n') printf("+\n");
   else { while(getchar()!='\n'); printf("-\n");}    
  }   
  else if(c=='7')
  {
   if(getchar()=='8' && getchar()=='\n') printf("+\n");
   else { while(getchar()!='\n'); printf("-\n");}    
  }
  else if(c=='9')
  {
   bool flag=0;
   while((c=getchar())!='\n')
   {
    if(c=='4') flag=1;                        
    else flag=0;
   }    
   if(flag) printf("*\n");
   else printf("-\n");
  }
  else
  {
   while(getchar()!='\n'); printf("-\n");   
  }
 } 
 return 0;  
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 9
    评论
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值