hdu2034为什么总是WA

#include<stdio.h>#include<stdlib.h>intmain(){intn,m,i,a[101],b[101],j,c[100]={0},t,k,... #include<stdio.h>
#include<stdlib.h>
int main()
{
int n,m,i,a[101],b[101],j,c[100]={0},t,k,d;
while(scanf("%d%d",&n,&m)!=EOF&&n!=0&&m!=0)
{ for(i=0;i<n;i++)
scanf("%d",&a[i]);
for(j=0;j<m;j++)
scanf("%d",&b[j]);
k=0;d=0;
for(i=0;i<n;i++)
{for(j=0;j<m;j++)
{if(a[i]==b[j])
break;
else
{
k++;
if(k==m)
{c[d]=a[i];
d++;}}}
k=0;}
if(d==0)
printf("NULL\n");
else
{
for(i=0;i<d;i++)
{for(j=0;j<d-1-i;j++)
if(c[i]>c[i+1])
{
t=c[i+1];
c[i+1]=c[i];
c[i]=t;
}
printf("%d ",c[i]);
}
printf("\n");}
}
return 0;
}
展开
 我来答
转瞬F即逝
2012-08-07
知道答主
回答量:23
采纳率:0%
帮助的人:19.4万
展开全部
额。。貌似你的算法有问题,如果先核对后排序的话可能会造成一个集合中有些数字没有被核对到,最终导致结果错误,如:假设A={2,4,1,7},B={2,1};
在for(i=0;i<n;i++)
{for(j=0;j<m;j++)
{if(a[i]==b[j])
break;
else
{
k++;
if(k==m)
{c[d]=a[i];
d++;}}}
k=0;}这一段语句中,当i=0时,a[i]==b[j]成立,跳出里面的循环,k为1,此时k不等于m,i自加1,当i为2,j为1时,a[i]==b[j],满足k==m,复制数组a在i以后的内容,但是,最终会发现,少了一个元素4,只得到一个元素7.显然答案错误。。所以应该首先排序,再核对。

这是我的代码:
#include<stdio.h>
#include<string.h>
int main()
{
int t,i,j,k,temp,m,n;int a[120],b[120],s[120];
while(scanf("%d %d",&n,&m)!=EOF)
{
memset(s,0,sizeof(s));
memset(a,0,sizeof(a));
memset(b,0,sizeof(b));//初始化
k=0;
if(n==0&&m==0)break;
for(i=0;i<n;i++)
scanf("%d",&a[i]);
for(i=0;i<m;i++)
scanf("%d",&b[i]);
for(i=0;i<n-1;i++)//排序
for(j=i+1;j<n;j++)
{
if(a[j]<a[j-1])
{temp=a[j];
a[j]=a[j-1];
a[j-1]=temp;}
}
for(i=0;i<n-1;i++)
for(j=i+1;j<n;j++)
{
if(b[j]<b[j-1])
{temp=b[j];
b[j]=b[j-1];
b[j-1]=temp;}
}
for(i=0;i<n;i++)
{
for(j=0;j<m;j++)
if(a[i]==b[j]) break;
if(j>=m)
{s[k]=a[i];k++;}
}
if(!k)printf("NULL\n");
else
{for(i=0;i<k;i++)
printf("%d ",s[i]);
printf("\n");}

}
return 0;
}
追问
汗~~发现错误了,是我的想法不对。少考虑个细节。。。。
追答
呵呵,发现了错误就好,这样才记得更深刻啊
众里寻他0822
2012-08-07 · TA获得超过136个赞
知道小有建树答主
回答量:263
采纳率:100%
帮助的人:250万
展开全部
我的理解 题目目的:将a数组中与b数组中不相同的存入c数组中,在将c 数组排序输出
前面没问题 ,但是 排序没做完你就急着输出,结果就不是有序的,程序做完后数组c中是有序的
你是什么问题?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式