求助C的wrong answer

wstc53032979 2011-12-29 11:53:38
给你K个字符串,请求出它们的最长公共前缀。输入第一行是一个整数N,表示测试样例的个数。每个测试样例的第一行是一个整数K(2 <= k <= 20),表示有多少个字符串;以后每行是一个字符串,每个字符串的长度不超过200个字符。 输出每行输出一个样例的结果。先输出“Case #: ”,其中’#’为样例的序号(从1开始),冒号为英文冒号,后接一个空格;然后是对应样例的结果。如果没有公共前缀,则无需输出前缀,但Case信息仍需要输出。

Sample Input
2
3
ACD
ACDEF
ACDFE
2
ABC
BCD


Sample Output
Case 1: ACD
Case 2:





我的代码是:

#include<stdio.h>
#include<string.h>
void main()
{
int len,i,k,n,count=1;
char s[205],p[205];
scanf("%d",&n);
getchar();
while(n--)
{
scanf("%d",&k);
getchar();
gets(p); //获得第一个串 设为公共串
k--;
while(k--)
{
gets(s);
for(i=0;s[i]==p[i];i++); //获得的每个串与公共串比较
len=i;
if(len==0)
break;
p[len]='\0'; //更新公共串


}
printf("Case %d: ",count++);
if(len)
{
for(i=0;p[i]!='\0';i++)
printf("%c",p[i]);
}

printf("\n");
}
}


一直Wrong Anwser 为什么?


一直wrong
...全文
110 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
ken_scott 2011-12-31
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 wstc53032979 的回复:]
我已经知道是哪错了
应该把
if(len==0)
break;
去掉


不然会提前跳出来 继续输入的字符串会进入下一个用例
[/Quote]
没看到... 让你找到了
relaxisland 2011-12-30
  • 打赏
  • 举报
回复
一直wrong answer是什么意思?
for(i=0;s[i]==p[i];i++); 这段代码有问题吧,字符串比较必须现在再长度以内,也就是\0出现之前

你输入的字符段 如果长度一样,而它的尾巴垃圾也一样,就可能无限比较下去。

还有
scanf("%d",&n);
getchar(); 这个是什么作用。
wstc53032979 2011-12-30
  • 打赏
  • 举报
回复
我已经知道是哪错了
应该把
if(len==0)
break;
去掉


不然会提前跳出来 继续输入的字符串会进入下一个用例
wstc53032979 2011-12-30
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 relaxisland 的回复:]
一直wrong answer是什么意思?
for(i=0;s[i]==p[i];i++); 这段代码有问题吧,字符串比较必须现在再长度以内,也就是\0出现之前

你输入的字符段 如果长度一样,而它的尾巴垃圾也一样,就可能无限比较下去。

还有
scanf("%d",&n);
getchar(); 这个是什么作用。
[/Quote]


scanf("%d",&n);
getchar();
的作用是
把 回车 这个字符给去掉
ken_scott 2011-12-30
  • 打赏
  • 举报
回复
1楼说的是个问题
另外可以修改一处
printf("%s", p);
/*
for(i=0;p[i]!='\0';i++)
printf("%c",p[i]);
*/

结果不会有错啊 不明白 你怎么就得不到正确答案

64,282

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧