讨论 / C++题解和坑
Zeagle 2021-05-07 10:21:42
点我顶贴 收藏 删除
这道题一开始我用的是set自动排序去重,最后使用auto输出,但是这个平台的测评机运行不了auto这种方法,所以编译错误ce两发。

然后使用标记数组标记每个数,如果出现了两次及以上则不存入新数组中,最后使用一个sort排序即可。

#1 Zeagle@2021-05-07 10:23:38
回复 删除
C++正解

int main() {

int n, x;

cin >> n;

int k = 0;

For(i, 1, n) {

cin >> x;

vis[x]++;//标记每个数出现的次数

if (vis[x] == 1) {//如果只出现了一次则存入新数组w中

w[k] = x;

k++;

}

}

cout << k << endl;

sort(w, w + k);//sort快排将数组从小到大排序

For(i, 0, k - 1) {

cout << w[i] << " ";

}

return 0;

}

#2 Zeagle@2021-05-07 10:25:03
回复 删除
set数组错误做法(CE)

set<int >s;

int main() {

int n,x;

cin>>n;

For(i,1,n){

cin>>x;

s.insert(x);

}

cout<<s.size()<<endl;

for(auto i:s){

cout<<i<<" ";

}

return 0;

}

#3 Zeagle@2021-05-07 10:28:41
回复 删除
有个东西没注意,代码中的For()其实是#define For(i, a, b) for(int i=a;i<=b;i++)

查看更多回复
提交回复