题目如下:
以下是我写的代码:
#include <iostream>
using namespace std;
#define N 100
class number
{
public:
void input()
{
cin>>n;
}
int getn()
{
return n;
}
void change(int m)
{
n = m;
}
void output()
{
cout<<n;
}
private:
int n;
};
int clean(number Number[],int n)
{
int i, t,j,k,m;
for(i = 0;i<n-1;i++)//n-1
{
t = Number[i].getn();
for(j = i+1;j<n;j++)
{
if(t == Number[j].getn())
{
for(k = j;k<n;k++)
{
m = Number[k+1].getn();
Number[k].change(m);
}
n--;//1
}
}
}
return n;
}
void sort(number Number[],int n)
{
int i,j,t1,t2;
for(i = n - 1;i>0;i--)
{
for(j = 0;j<i;j++)
{
t1 = Number[j].getn();
t2 = Number[j+1].getn();
if(t1>t2)
{
Number[j].change(t2);
Number[j+1].change(t1);
}
}
}
}
int main()
{
number Number[N];
int n,m;
cin>>n;
int i;
for(i = 0;i<n;i++)
{
Number[i].input();
}
m = clean(Number,n);
sort(Number,m);
cout<<m<<endl;
for(i = 0;i<m;i++)
{
Number[i].output();
cout<<' ';
}
return 0;
}
然后呢,结果是这样:
我知道有简单的算法,比如set库,或者直接用容量为1000的数组,我现在就想搞清楚我这里哪里错了。谢谢老师们了
写法过于复杂了,其实数值的范围在 1000 的话,可以用桶排序,同时实现排序和去重
建议你先排序,再去重,效率会更高。 因为排序的过程把相同数值的数都放在一起了。
你每做一遍排序,你就把数字都打印出来看看, 就能看到哪里出了问题。
请问这是哪个测试平台的题目?
您好,我是有问必答小助手,您的问题已经有小伙伴解答了,您看下是否解决,可以追评进行沟通哦~
如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~
ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632
非常感谢您使用有问必答服务,为了后续更快速的帮您解决问题,现诚邀您参与有问必答体验反馈。您的建议将会运用到我们的产品优化中,希望能得到您的支持与协助!
速戳参与调研>>>https://t.csdnimg.cn/Kf0y