杭电acm 让我wrong 了 n次的题目http:⼀⼀acm.hdu.edu.cn⼀showproblem.php?pid=2034 求改错

2024-12-16 16:28:05
推荐回答(3个)
回答1:

改你的代码比较吃力啊,没有注释,还有些代码不怎么符合通俗习惯,建议多读点源码,算法还不错,有思想。这个我花了15分钟改,如果我自己写要快得多,呵呵,我改的地方都有注释,还附上了测试用例,结贴吧。

#include
#include
using namespace std;
/**
3 3 3 2 1 7 4 1
3 7 8 5 2 2 3 4 5 6 7 8
0 1 1
1 0 1
3 1 3 3 3 3
0 0
*/
int main()
{
int n,m;
int i,j;
int a[101],b[101];
while(cin>>n>>m && (n!=0 || m!=0) )
{
for(i=1;i<=n;i++) cin>>a[i];
for(i=1;i<=m;i++) cin>>b[i];
sort(a+1,a+n+1);//排序的起点是1,终点是n+1;这样的错误一般是用起点1时容易犯,所以以后最好0开始,不要以为不符合思维习惯,0才是好的习惯
sort(b+1,b+m+1);//添加 b排序。因为不能在b同一个元素在a中被多次减去
int cnt=0;
int start = 1;//开始比较的b的起始值
for(i=1;i<=n;i++)
{
int ok=1;//ok等0表示a[i]被减去
for(j=start;j<=m;j++)
{
if(a[i]==b[j]){ok=0; start = j+1; break;}
else if(a[i] }
if(ok) cout< else cnt++;
}
if(cnt==n) cout<<"NULL"< else cout< }
return 0;
}

回答2:

#include
#include
using namespace std;
int main()
{
int n,m;
int i,j;
int a[101],b[101];
int c[101];
while(cin>>n>>m&&(n!=0 || m!=0))
{
for(i=1; i<=n; i++)
cin>>a[i];
for(i=1; i<=m; i++)
cin>>b[i];
sort(a+1,a+n+1);
int cnt=0;
for(i=1; i<=n; i++)
{
int ok=0;
for(j=1; j<=m; j++)
{
if(a[i]!=b[j])
ok++;
}
if(ok==m)
cout< else cnt++;
}
if(cnt==n)
cout<<"NULL"< else cout< }
return 0;
}
楼上正解~sort函数楼主不会用
PS给楼上:只需要改sort函数就可以了,楼主没用让减B只是与B不同就打印出来,所以不必做那么多改动

回答3:

你读取数据时吧数据存在a[1]到a[n]中,排序时sort就要改成sort(a+1,a+n+1),否则a[0]也会参与排序,影响结果的正确性,这么改就能AC了