标题:求教:回文挑错,输出没错,过样例没错,超时了。
只看楼主
huicpc0876
Rank: 2
等 级:论坛游民
帖 子:69
专家分:50
注 册:2009-7-24
结帖率:92.59%
已结贴  问题点数:20 回复次数:8 
求教:回文挑错,输出没错,过样例没错,超时了。
题目:与以往的回文不同,只判断字母是不是构成回文,不是字母的一律当作不存在。
Sample Input
radar
rAd. Ar
radiar
able was I ere I saw elba!
b
bb
ab
aabaa
aabbaa
aab2aa
aabaaa
This is a palindrome
radar is a palindrome
a man, a plan, a canal, panama!
a bell was eye, ear I saw elbow
go hang a salami, bub, i’m a lasagna hog!!
 
Sample Output
YES
YES
NO
YES
YES
YES
NO
YES
YES
YES
NO
NO
NO
YES
NO
YES
 

代码,用指针实现
#include "stdio.h"
#include "string.h"
int main()
{
    int i;
    char a[101];
    char *p,*q;
  while(gets(a)!=EOF)   
   { i=strlen(a);
    p=&a[0];
    q=&a[i-1];     
    while(p<q)
    {
      
      if(*p==*q)
     {
        p++;
        q--;        
      }
   
     else if(!((*p<='A'&&*p>='Z')||(*p>='a'&&*p<='z') ) )   *p++;
       else if(!((*q>='A'&&*q<='Z')||(*q>='a'&&*q<='z') ) ) *q--;
        else  {
                  printf("N0\n");
                  break;
                }   
    }
    if(p>=q) printf("YES\n");
  } return 0;
}
搜索更多相关主题的帖子: 回文 挑错 超时 输出 
2009-08-02 13:40
leeco
Rank: 4
等 级:贵宾
威 望:10
帖 子:1026
专家分:177
注 册:2007-5-10
得分:2 
gets(a)永远不会返回EOF
2009-08-02 15:25
huicpc0876
Rank: 2
等 级:论坛游民
帖 子:69
专家分:50
注 册:2009-7-24
得分:0 
回复 2楼 leeco
不是这个问题,我改了交过,也超时。
2009-08-02 17:57
AND_Y
Rank: 2
等 级:论坛游民
帖 子:18
专家分:45
注 册:2009-7-31
得分:9 
你说你的能过样例,我试了,你的程序,你的样例,但是过不了,所以你先把你的程序搞对啊,
你的else if 里 的 *p++,和*q++;你是想要干嘛,难道不是p++和q++吗;你确定你的while语句里 能使指针*p和*q同时移动吗?程序对了的话,就这么个简单的循环还会超时???
2009-08-03 16:22
CrystalFan
Rank: 8Rank: 8
来 自:江苏南京
等 级:蝙蝠侠
帖 子:187
专家分:802
注 册:2009-7-30
得分:0 
以下是引用leeco在2009-8-2 15:25的发言:

gets(a)永远不会返回EOF


他用的是Online Judge系统,默认输入是读文件
2009-08-03 16:55
CrystalFan
Rank: 8Rank: 8
来 自:江苏南京
等 级:蝙蝠侠
帖 子:187
专家分:802
注 册:2009-7-30
得分:9 
else if(!((*p<='A'&&*p>='Z')||(*p>='a'&&*p<='z') ) )   *p++;

都错了,矛盾!应该为
if(!((*p>='A'&&*p<='Z')||(*p>='a'&&*p<='z')))

[[it] 本帖最后由 CrystalFan 于 2009-8-3 17:02 编辑 [/it]]
2009-08-03 17:00
leeco
Rank: 4
等 级:贵宾
威 望:10
帖 子:1026
专家分:177
注 册:2007-5-10
得分:0 
以下是引用CrystalFan在2009-8-3 16:55的发言:

他用的是Online Judge系统,默认输入是读文件


那又如何呢?你想说什么呢?
2009-08-03 22:44
CrystalFan
Rank: 8Rank: 8
来 自:江苏南京
等 级:蝙蝠侠
帖 子:187
专家分:802
注 册:2009-7-30
得分:0 
回复 7楼 leeco
我是想说,他写的是gets(...),但实际是在读文件,所以可以直接用gets(...);
我知道你说的是gets(...)返回值是char*,不可能为EOF;
你是对的,我前两天没有仔细研究,真不好意思!
2009-08-04 01:05
wdeast
Rank: 2
等 级:论坛游民
帖 子:14
专家分:74
注 册:2009-7-13
得分:0 
返回的是指针。不是内容,不可能为EOF。
用DO...while(a[0]!=EOF)试试?
2009-08-04 16:48



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-281336-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.711234 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved