说明
明明想在学校中请一些同学一起做一项问卷调查,为了实验的客观性,他先用计算机生成了N个1到1000之间的随机
整数(N≤100),对于其中重复的数字,只保留一个,把其余相同的数去掉,不同的数对应着不同的学生的学号。
然后再把这些数从小到大排序,按照排好的顺序去找同学做调查。请你协助明明完成“去重”与“排序”的工作。
输入格式
有2行,第1行为1个正整数,表示所生成的随机数的个数:第2行有N个用空格隔开的正整数,为所产生的随机数。
输出格式
第1行为1个正整数M,表示不相同的随机数的个数。
第2行为M个用空格隔开的正整数,为从小到大排好序的不相同的随机数,每个数字后面有一个空格。
样例
输入数据 1
10
20 40 32 67 40 20 89 300 400 15
Copy
输出数据 1
8
15 20 32 40 67 89 300 400
本人代码风格辣鸡。看看就行。
#include <bits/stdc++.h>
using namespace std;
priority_queue<int>c;//优先队列
int a[10003],b[10003]={1};
int main(){
int n,max=0,cnt=0;
cin>>n;
for(int i=1;i<=n;i++)
{
int b;
cin>>b;
c.push(b);
}
for(int i=n;i>0;i--)
{
a[i]=c.top();
c.pop();
}//把优先队列的数存入数组里
for(int i=1;i<=n;i++)
{
b[i]=1;
}//假设每个数都不重复
for(int i=1;i<=n;i++)
{
if(a[i]==max)
{
b[i]=0;//重复了
}
max=a[i];//等于上一个数,如果相等就是重复了
}
for(int i=1;i<=n;i++)
{
if(b[i]==1)
{
cnt++;//没重复的数加起来
}
}
cout<<cnt<<endl;
for(int i=1;i<=n;i++)
{
if(a[i]!=max)
{
cout<<a[i]<<" ";//因为是有序的,所以如果不等于上一个数,直接输出就行
}
max=a[i];//记得存上一个数
}
return 0;
}//代码无误
AC记录
100 Accepted
# | 状态分数 | 耗时 | 内存占用 |
---|---|---|---|
#1 | Accepted10 | 1ms | 404 KiB |
#2 | Accepted10 | 1ms | 404 KiB |
#3 | Accepted10 | 1ms | 404 KiB |
#4 | Accepted10 | 1ms | 508 KiB |
#5 | Accepted10 | 1ms | 408 KiB |
#6 | Accepted10 | 1ms | 404 KiB |
#7 | Accepted10 | 1ms | 404 KiB |
#8 | Accepted10 | 1ms | 324 KiB |
#9 | Accepted10 | 1ms | 324 KiB |
#10 | Accepted10 | 1ms | 404 KiB |
代码
#include <bits/stdc++.h>
using namespace std;
priority_queue<int>c;
int a[10003],b[10003]={1};
int main(){
int n,max=0,cnt=0;
cin>>n;
for(int i=1;i<=n;i++)
{
int b;
cin>>b;
c.push(b);
}
for(int i=n;i>0;i--)
{
a[i]=c.top();
c.pop();
}
for(int i=1;i<=n;i++)
{
b[i]=1;
}
for(int i=1;i<=n;i++)
{
if(a[i]==max)
{
b[i]=0;
}
max=a[i];
}
for(int i=1;i<=n;i++)
{
if(b[i]==1)
{
cnt++;
}
}
cout<<cnt<<endl;
for(int i=1;i<=n;i++)
{
if(a[i]!=max)
{
cout<<a[i]<<" ";
}
max=a[i];
}
return 0;
}