n 个正整数 ,请你找出这些正整数中一共有多少个互不相同的正整数。c++用数组
时间: 2024-02-13 07:05:45 浏览: 130
可以使用数组和计数排序来实现。首先声明一个数组 `cnt`,用于记录每个正整数出现的次数。然后遍历输入的正整数,每输入一个正整数,就将对应的计数器加一。最后遍历一遍计数器数组,统计出现次数不为零的元素个数即可。以下是示例代码:
```c++
#include <iostream>
#include <cstring>
using namespace std;
const int MAXN = 1000000; // 数组大小,根据具体情况进行修改
int cnt[MAXN + 1]; // 计数器数组
int main() {
int n;
cin >> n;
memset(cnt, 0, sizeof(cnt)); // 数组初始化为零
for (int i = 0; i < n; i++) {
int x;
cin >> x;
cnt[x]++;
}
int ans = 0;
for (int i = 1; i <= MAXN; i++) {
if (cnt[i] > 0) {
ans++;
}
}
cout << ans << endl;
return 0;
}
```
其中 `memset` 函数用于将数组初始化为零。注意,数组大小需要根据具体情况进行修改。如果数据范围比较大,可以使用 `vector` 来替代数组。
相关问题
n 个正整数 ,请你找出这些正整数中一共有多少个互不相同的正整数。c++用数组 箱排序
可以使用桶排序来实现。桶排序的思路是将每个正整数放入对应的桶中,最后遍历桶,统计非空桶的个数即可。以下是示例代码:
```c++
#include <iostream>
#include <cstring>
using namespace std;
const int MAXN = 1000000; // 数组大小,根据具体情况进行修改
int cnt[MAXN + 1]; // 计数器数组
int main() {
int n;
cin >> n;
memset(cnt, 0, sizeof(cnt)); // 数组初始化为零
for (int i = 0; i < n; i++) {
int x;
cin >> x;
cnt[x]++;
}
int ans = 0;
for (int i = 1; i <= MAXN; i++) {
if (cnt[i] > 0) {
ans++;
}
}
cout << ans << endl;
return 0;
}
```
其中桶的数量为 MAXN,数组 `cnt` 记录每个正整数出现的次数。遍历输入的正整数,每输入一个正整数,就将对应的计数器加一。最后遍历一遍计数器数组,统计出现次数不为零的元素个数即可。
n 个正整数 ,请你找出这些正整数中一共有多少个互不相同的正整数。c++
可以使用 `unordered_set` 来实现。`unordered_set` 是 C++ STL 中的一个容器,它可以自动去重并且哈希查找,因此效率比 `set` 更高。以下是示例代码:
```c++
#include <iostream>
#include <unordered_set>
using namespace std;
int main() {
int n;
cin >> n;
unordered_set<int> s;
for (int i = 0; i < n; i++) {
int x;
cin >> x;
s.insert(x);
}
cout << s.size() << endl;
return 0;
}
```
首先输入正整数个数 `n`,然后利用 `for` 循环输入这 n 个正整数,并将它们插入到 `unordered_set` 中。最后输出 `unordered_set` 的大小即可。
阅读全文