hdu2034为什么总是WA

2024-12-22 12:21:31
推荐回答(2个)
回答1:

额。。貌似你的算法有问题,如果先核对后排序的话可能会造成一个集合中有些数字没有被核对到,最终导致结果错误,如:假设A={2,4,1,7},B={2,1};
在for(i=0;i {for(j=0;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
#include
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 scanf("%d",&a[i]);
for(i=0;i scanf("%d",&b[i]);
for(i=0;i for(j=i+1;j {
if(a[j] {temp=a[j];
a[j]=a[j-1];
a[j-1]=temp;}
}
for(i=0;i for(j=i+1;j {
if(b[j] {temp=b[j];
b[j]=b[j-1];
b[j-1]=temp;}
}
for(i=0;i {
for(j=0;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 printf("%d ",s[i]);
printf("\n");}

}
return 0;
}

回答2:

我的理解 题目目的:将a数组中与b数组中不相同的存入c数组中,在将c 数组排序输出
前面没问题 ,但是 排序没做完你就急着输出,结果就不是有序的,程序做完后数组c中是有序的
你是什么问题?