C Morgan和字符串算法
我正在从以下链接尝试解决此问题: 杰克和丹尼尔是朋友。他们俩都喜欢字母,尤其是 大写的。他们从报纸上剪下大写字母, 他们每一个人都有自己的信件收藏 分开堆放。一个美好的日子,摩根拜访了杰克和丹尼尔。 他看到了他们的收藏。摩根想知道这是怎么回事 字典最小字符串,由这两个集合组成。他能 当一封信在书堆顶部时,从书堆中取出一封信。 此外,摩根希望使用男孩收藏中的所有字母 我的代码如下:C Morgan和字符串算法,c,algorithm,C,Algorithm,我正在从以下链接尝试解决此问题: 杰克和丹尼尔是朋友。他们俩都喜欢字母,尤其是 大写的。他们从报纸上剪下大写字母, 他们每一个人都有自己的信件收藏 分开堆放。一个美好的日子,摩根拜访了杰克和丹尼尔。 他看到了他们的收藏。摩根想知道这是怎么回事 字典最小字符串,由这两个集合组成。他能 当一封信在书堆顶部时,从书堆中取出一封信。 此外,摩根希望使用男孩收藏中的所有字母 我的代码如下: #include <stdio.h> #include <string.h> #inclu
#include <stdio.h>
#include <string.h>
#include <math.h>
#include <stdlib.h>
int main() {
int flag,choice;
long n,i,j=0,k=0,x,y;
char *a,*b;
a=(char*)malloc(sizeof(char)*100000);
b=(char*)malloc(sizeof(char)*100000);
scanf("%ld",&n);
for(i=0;i<n;i++){
j=k=0;
scanf("%s%s",a,b);
x=strlen(a);
y=strlen(b);
while(x<y)a[x++]='Z'+1;
while(y<x)b[y++]='Z'+1;
a[x]=b[y]='\0';
while(j<x && k<y && (a[j]!=('Z'+1) && b[k]!=('Z'+1))){
if(strcmp(a+j,b+k)<0)printf("%c",a[j++]);
else printf("%c",b[k++]);
}
while(j<x && a[j]!=('Z'+1))printf("%c",a[j++]);
while(k<y && b[k]!=('Z'+1))printf("%c",b[k++]);
printf("\n");
}
return 0;
}
预期和正确输出:
cac
以下内容不适用:
输入:
1
c
ca
1
zbc
aaaaz
预期产出:
aaaazbcz
实际产量:
aaaazzbc
我遗漏了什么?我现在知道了。下面的情况如何
1
zbc
aaaaz
正如你在4
a
之后看到的那样,我们只剩下az
和zbc[[
其中[/code>是'z'+1
。显然,z
你的输入缓冲区短了一个字符。另外,不要强制转换malloc()
。这绝对不是我的问题。虽然,我应该像你说的那样多留一个字符,但没有一个测试用例字符串达到这么高的程度。我会注意你关于类型转换的建议。我花了一些时间来用一个较短的用例来破坏我的代码。但是当我把测试用例短到可以发布到这里时,我也明白了在哪里问题是假的。我现在已经发布了解决方案。下次发布问题时,我会考虑你的观点。@MayankVerma啊!我想每个经常在这个网站上发布的人都会发生这种情况,我认为这是一件好事。将问题和测试用例减少到发布问题的最小值通常会暴露错误。如果您可以编辑问题,使其包含未通过原始代码的缩短测试用例,并使问题更加具体,我将删除我的投票。编辑得好。我已撤回我的投票。(我还删除了“更新”)您添加的内容。只需在下面添加答案就足够了。无需在问题本身中大声说出答案。问题应保持独立且尽可能无噪音。)
#include <stdio.h>
#include <string.h>
#include <math.h>
#include <stdlib.h>
int main() {
int flag,choice;
long n,i,j=0,k=0,x,y;
char *a,*b;
a= malloc(sizeof(char)*200000);
b= malloc(sizeof(char)*200000);
scanf("%ld",&n);
for(i=0;i<n;i++){
j=k=0;
scanf("%s%s",a,b);
x=strlen(a);
y=strlen(b);
while(x<y)a[x++]='Z'+1;
while(y<x)b[y++]='Z'+1;
a[x]=b[y]='\0';
while(j<x && k<y && (a[j]!=('Z'+1) && b[k]!=('Z'+1))){
if(strcmp(a+j,b+k)<0){printf("%c",a[j++]);a[x++]='Z'+1;a[x]='\0';}
else {printf("%c",b[k++]);b[y++]='Z'+1;b[y]='\0';}
}
while(j<x && a[j]!=('Z'+1))printf("%c",a[j++]);
while(k<y && b[k]!=('Z'+1))printf("%c",b[k++]);
printf("\n");
}
return 0;
}