读书人

几乎一样的思路为什么小弟我超时了?简

发布时间: 2012-11-03 10:57:43 作者: rapoo

几乎一样的思路为什么我超时了?简单ACM题求看
///////////////////////////以下是题目要求
Sample Input

1

3
I am happy today
To be or not to be
I want to win the practice contest


Sample Output

I ma yppah yadot
oT eb ro ton ot eb
I tnaw ot niw eht ecitcarp tsetnoc


首先是我的代码:

C/C++ code
#include<stdio.h>#include<string.h>#define MAX 1000int main(){   int cases,n;   scanf("%d%d",&cases,&n);   getchar(); //不加参数则等价于cin.ignore(1,EOF);忽略结尾前的1个字符cin.ignore(1024,\n)也常用   char str[MAX];   char token[MAX];   int i,j,k;   while(cases--){     while(n--){       gets(str);       int len=strlen(str);       k=0;       for(i=0;i<=len;i++){  //此处要去=len否则没有检查最后个单词后是否为空格就结束最后个单词没法输出          if(str[i]!=' '&&str[i]!=0){ //遇到空格说明一个单词结束进行反向输出,遇到回车表示一行结束             token[k++]=str[i];          }          else{             for(j=k-1;j>=0;j--)  printf("%c",token[j]);             if(str[i]!=0)  printf(" "); //若是结尾则不需要再输入空格了             k=0;          }       }        printf("\n"); //一行单词结束换行     }     if(cases!=0)    printf("\n");   }   return 0;}



然后是正确的代码
C/C++ code
#include<iostream>#include<string.h>#include<stdio.h>using namespace std;int main(){    char s[1000];    char s1[1000];    int cases;    int num;    int i , k ,j ;    scanf("%d",&cases );    while(cases --)    {        scanf("%d",&num) ;        gets(s);     //关键的一行语句,获取scanf输入后面的换行; 否则就当是一次输入处理        while(num--)        {            gets(s);            int len =strlen(s);            k=0;            for(i =0; i <= len; i++)            {                if(s[i]!=' ' && s[i]!='\0')                    s1[k++] =s[i];                else                {                    for ( j=k-1; j>=0; j--)                        printf("%c",s1[j]);                    if(s[i] ==' ')                        printf(" ");                    k=0;                }            }            printf("\n");        }        if(cases >0)            printf("\n");    }    return 0;}



郁闷死了 你们给我看看 到底是哪里不一样了 我看了遍 就是scanf输入的2个位置不同

顺便说明下cases代表测试组数 n表示英文的行数

还有题目是ZOJ1151

[解决办法]
getchar(); 去掉,我猜是这个有问题
[解决办法]
2个scanf()位置不同,应该逻辑上差异很大了,下面的scanf()是每次外层循环都调用一次,而上面那个是总共只调用一次.

没完整的看代码,判断可能存在偏差,供参考.

读书人网 >C++

热点推荐