给你一个长度为 N 的序列 A,你可以对序列中的每个数进行加 1 或 减1 ,最多只能进行一次这样的操作,当然也可以不操作,操作后的数大于 0 。问序列中最多有多少个不同的数字。 数据范围 0<N<10^5 0<Ai<10^5 输入格式 N A1、A2、...、An 输出格式 打印一个整数表示最多有多少个不同的数字 要求输入 4 2 2 3 3 之后输出 4 请用C++语言写一段程序
时间: 2024-03-21 11:44:34 浏览: 26
好的,我来为您编写这段程序:
```c++
#include <iostream>
#include <algorithm>
#include <set>
using namespace std;
int main() {
int n;
cin >> n;
int a[n];
for (int i = 0; i < n; i++) {
cin >> a[i];
}
set<int> s;
for (int i = 0; i < n; i++) {
s.insert(a[i]);
}
int ans = s.size();
for (int i = 0; i < n; i++) {
int tmp = a[i];
a[i] += 1;
set<int> s1;
for (int j = 0; j < n; j++) {
s1.insert(a[j]);
}
ans = max(ans, (int)s1.size());
a[i] = tmp - 1;
set<int> s2;
for (int j = 0; j < n; j++) {
s2.insert(a[j]);
}
ans = max(ans, (int)s2.size());
a[i] = tmp;
}
cout << ans << endl;
return 0;
}
```
程序的主要思路是,先把数组中的数字插入到一个 set 容器中,这样就可以得到数组中不同数字的个数。然后对于每个数字,分别进行加 1 和减 1 的操作,再把新的数组中的数字插入到一个新的 set 容器中,并记录新容器中不同数字的个数,最后取所有情况中不同数字个数的最大值作为答案。