杭电ACM 1412题我哪里错了? http://acm.hdu.edu.cn/showproblem.php?pid=1412

#include<stdio.h>#include<string.h>voidmain(){inta[1000],b[1000],c[2000],n,m;inti,j,k... #include<stdio.h>
#include<string.h>
void main()
{int a[1000],b[1000],c[2000],n,m;
int i,j,k,l;
while(scanf("%d%d",&n,&m)!=EOF)
{
for(i=0;i<n;i++)
scanf("%d",&a[i]);
for(i=0;i<m;i++)
scanf("%d",&b[i]);
i=j=0;k=0;
while(i<n&&j<m) //对数组a和b进行合并
{
if(a[i]<=b[j])
c[++k]=a[i++];
else
j++;
}
while(i<n)//插入a剩余数组
{
c[++k]=a[i++];
}

while(j<m)//插入剩余数组
{
c[++k]=b[j++];
}

for(l=1;l<=k;l++)//循环输出
if(c[l]==c[l+1])
continue;
else
printf(l==k?"%d":"%d ",c[l]);

printf("\n");
}

}
展开
 我来答
tanzhangwen
2012-03-07
知道答主
回答量:0
采纳率:0%
帮助的人:0
展开全部
你的错误在于
1. 你没有把开始输入的两个集合的数进行排序,而直接假定他们是有序的
调用排序函数,c的qsort或者c++的sort
2. 输出的时候最后空格肯定会出问题
解决办法:printf(l==1?"%d":" %d",c[l]);
3. 两个数组加起来的元素可能为2000个,你的数组定义2000,但是你存的时候从1开始,所以就有可能越界,调整c[2001]

如果我以上的介绍无法让你改正错误,你可以继续追问让我写程序给你
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式