首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

【C++专项】去重

实现方法:数组标记 | unique | set| map题目:数字处理题目描述

给出一个含有 n 个整数的序列,请你输出它们的总和、最大值、最小值、并大到小输出(去重后)。

输入

第—个整数n (1<n≤

) 第二行n个整数ai (1≤ai≤

)。

输出

第一行输出一个整数,表示总和。 第二行输出一个整数,表示最大值。 第三行输出一个整数,表示最小值。 第四行输出若干个空格分隔的整数,表示从大到小排序后的序列(相同的数只输出一次)。

样例输入

8

8 5 1 9 2 6 2 6

样例输出

39

9

1

9 8 6 5 2 1

【标程1】: 数组标记或用循环

#include<bits/stdc++.h>

usingnamespacestd;

constint N = 1e4 + 5;

int a[N],n,sum;

int vis[N]; // 标记数组

int main(){

cin >> n;

for(int i = 1; i <= n; i++){

cin >> a[i];

sum += a[i];

}

//排序

sort(a+1,a+1+n);

//输出

cout << sum << '\n';

cout << a[n] << '\n';

cout << a[1] << '\n';

for(int i = n; i >= 1; i--){

if(!vis[a[i]]){

 cout << a[i] << " ";

 vis[a[i]] = 1;

}

}

return0;

}

【标程2】:unique函数

#include<bits/stdc++.h>

usingnamespacestd;

constint N = 1e4 + 5;

int a[N],n,sum;

int main(){

cin >> n;

for(int i = 0; i < n; i++){

cin >> a[i];

sum += a[i];

}

//排序

sort(a,a+n);

//输出

cout << sum << '\n';

cout << a[n-1] << '\n';

cout << a[0] << '\n';

// unique去重

int pos = unique(a,a+n) - a;

for(int i = pos-1; i >= 0; i--){

cout << a[i] << " ";

}

return0;

}

【标程3】:set大到小

#include<bits/stdc++.h>

usingnamespacestd;

set<int, greater<int>> st;

int main() {

  int n, sum = 0, x;

  cin >> n;

  for (int i = 1; i <= n; i++) {

      cin >> x;

      sum += x;

      st.insert(x);

  }

  cout << sum << '\n';

  // set<int>::iterator it = st.begin();

  auto it = st.begin();

  cout << *it << "\n";  // 输出最大值

  it = --st.end();  // 正确获取指向最小值的迭代器

  cout << *it << "\n";

  for (it = st.begin(); it!= st.end(); ++it) {

      cout << *it << " ";

  }

// for(auto it : st){

//  cout << it << " ";

// }

  return0;

}

【标程4】:set小到大

#include<bits/stdc++.h>

usingnamespacestd;

set<int> st;

int main() {

  int n, sum = 0, x;

  cin >> n;

  for (int i = 1; i <= n; i++) {

      cin >> x;

      sum += x;

      st.insert(x);

  }

  cout << sum << '\n';

  auto it = --st.end();

  cout << *it << "\n";  // 输出最大值

  it = st.begin();  // 正确获取指向最小值的迭代器

  cout << *it << "\n";

  for (it = --st.end(); it!= --st.begin(); --it) {

      cout << *it << " ";

  }

  return0;

}

【标程5】:map

#include<bits/stdc++.h>

usingnamespacestd;

int x,n,sum;

map<int,bool,greater<int>>mp;

int main(){

cin >> n;

for(int i = 1; i <= n; i++){

cin >> x;

sum += x;

mp[x]++;

}

//输出

cout << sum << '\n';

auto it = mp.begin();//迭代器

cout << it->first <<'\n';

it = --mp.end();

cout << it->first <<'\n';

for(it = mp.begin(); it != mp.end(); ++it){

cout << it->first << " ";

}

return0;

}

  • 发表于:
  • 原文链接https://page.om.qq.com/page/OsKPsVnLbN0pPoeN-CvMYEFg0
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券