5 条题解
-
2
#include <bits/stdc++.h> using namespace std; int main() { set<int>st; int n, x; cin >> n; for (int i = 1; i <= n; i++) { cin >> x; st.insert(x); } cout << st.size() << endl; for (set<int>::iterator i = st.begin(); i != st.end(); i++) { cout << *i << " "; } return 0; }
-
1
#include<bits/stdc++.h> using namespace std; int main(){ int n; cin>>n; set<int> s; int a;//input value for(int i=0;i<n;i++){ cin>>a; s.insert(a); } int ans=0; for(set<int>::iterator it=s.begin();it!=s.end();it++){ ans++;//s.size() } cout<<ans<<endl; for(set<int>::iterator it=s.begin();it!=s.end();it++){ cout<<*it<<" "; } return 0; }
-
0
我发现它更去除重复数字一样
-
0
set&&数组下标
1.set 这道题去重+排序用set肯定是最简单的 //
#include<bits/stdc++.h> using namespace std; set <int> a; int main(){ int n; cin>>n; for(int i=1;i<=n;i++){ int b; cin>>b; a.insert(b); } cout<<a.size()<<endl; for(set<int> :: iterator it=a.begin();it!=a.end();it++){//迭代器 cout<<*it<<" "; } return 0; }
2.数组下标法 数组下标法做这道题也好做,就是要输出长度有点小麻烦。
#include<bits/stdc++.h> using namespace std; const int N=1e6+5; int a[105],b[N],c[N],size,maxx; int main(){ int n; cin>>n; for(int i=1;i<=n;i++){ scanf("%d",&a[i]); maxx=max(maxx,a[i]);//maxx是输入的a[i]中的最大值,数组下标法里b[i]最大非空位就是最大的a[i],所以下面一个for要i<=maxx来保证能遍历到b里面所有的1 b[a[i]]=1;//去重其实就在这里实现了,每次输入同样的数时,都会把b[a[i]]=1,最后输出有1的就行 } for(int i=1;i<=maxx;i++){//c数组的意义是下面一个for为了去重,要将b中已经统计的数归零,而下面还要输出b[a[i]],所以用一个c数组来输出 c[i]=b[i]; } for(int i=1;i<=n;i++){//这个for用来统计输出的个数 if(b[a[i]]==1){ size++; b[a[i]]=0; } } sort(a+1,a+n+1);//排序 cout<<size<<endl; for(int i=1;i<=n;i++){//这个for用来输出 if(c[a[i]]==1){//因为a里没有的数都是0,所以要判断为1再输出 cout<<a[i]<<" "; c[a[i]]=0; } } return 0; }
当然这不是全部的方法,欢迎补充和讨论,大蛇们不喜勿喷
- 1
信息
- ID
- 761
- 时间
- 1000ms
- 内存
- 16MiB
- 难度
- 2
- 标签
- 递交数
- 91
- 已通过
- 58
- 上传者