洛谷 P1059【明明的随机数】 题解

事实上,完全可以先将输入进来带有重复的元素们保存进一个数组并对该数组进行排序,再将该数组的各个元素逐个判断是否与前一元素相同(重复与否的判断),将不重复的元素转移至另一个数组,与此同时进行对不重复元素的项数进行计数(懒得打计数器)

代码如下


//Stand up for the faith!
#include<bits/stdc++.h>
#define INF 0x3f3f3f3f
#define LL long long
#define FRO freopen
#define FCO fclose
#define US unsigned
#define CN const
#define MAXN 20001

using namespace std;

inline LL read()
{
    LL s=0,w=1;
    char ch=getchar();
    while(ch<'0'||ch>'9')
    {
        if(ch=='-')w=-1;
        ch=getchar();
    }
    while(ch>='0'&&ch<='9')
    {
        s=s*10+ch-'0';
        ch=getchar();   
        }
    return s*w;
}

int n,num=1,a[2000],final[2000]; //关于为什么num=1,后面会解释。

int main(void)
{
//  FRO("****.in","r",stdin);
//  FRO("****.out","w",stdout);
    n=read();
  for(int i=1;i<=n;i++)
  {
    a[i-1]=read();
  }
  sort(a,a+n);         //a数组排序。
  final[0]=a[0];        //i=0时再-1数组会越界,故先处理掉a[0]。
  for(int i=1;i<n;i++)     //判断是否重复(此处因a[0]已处理,直接从a[1]开始)。
  {
      if(a[i]==a[i-1])    //如果重复,直接跳过。
      continue;
      else         //如不重复,将元素转移至final数组
      {
        final[num]=a[i]; //此处因为0号元素已经解决,从num=1开始计项数。
        num++;                    
      }
  }
  cout<<num<<endl;     //输出项数与各个不重复元素。
  for(int i=0;i<num;i++)   //这里不涉及越界,故可以从0开始。
  {
    cout<<final[i]<<" ";
  }
    return 0;
    FCO(stdin);FCO(stdout);
}

转载于:https://www.cnblogs.com/KGB1331/p/10581098.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值