几乎一样的思路为什么我超时了?简单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
首先是我的代码:
#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;}#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;}