输入n个整数,求其中最大的3个数和。c++
时间: 2024-01-27 08:06:01 浏览: 33
可以使用一个大小为3的最大堆,遍历n个整数,将每个整数与堆顶元素比较,若大于堆顶元素,则将堆顶元素替换成该整数并重新调整堆。最终堆中的三个元素即为最大的三个数。
以下是C++代码实现:
```c++
#include <iostream>
#include <queue>
using namespace std;
int main() {
int n;
cin >> n;
priority_queue<int, vector<int>, greater<int>> pq;
for (int i = 0; i < n; i++) {
int x;
cin >> x;
if (pq.size() < 3) {
pq.push(x);
} else if (x > pq.top()) {
pq.pop();
pq.push(x);
}
}
int sum = 0;
while (!pq.empty()) {
sum += pq.top();
pq.pop();
}
cout << sum << endl;
return 0;
}
```
相关问题
输入n个整数,求其中最大的3个数。c++
可以使用排序算法实现:
```c++
#include <iostream>
#include <algorithm>
using namespace std;
int main() {
int n, arr[100];
cin >> n;
for (int i = 0; i < n; i++) {
cin >> arr[i];
}
sort(arr, arr + n);
if (n < 3) { // 数组长度小于3
cout << "输入的整数不足3个" << endl;
return 0;
}
cout << "最大的3个数为:" << arr[n - 1] << " " << arr[n - 2] << " " << arr[n - 3] << endl;
return 0;
}
```
也可以使用选择排序,每次找到最大的数,然后把它放到数组的最后面,直到找到前三个最大的数为止。
```c++
#include <iostream>
using namespace std;
int main() {
int n, arr[100];
cin >> n;
for (int i = 0; i < n; i++) {
cin >> arr[i];
}
if (n < 3) { // 数组长度小于3
cout << "输入的整数不足3个" << endl;
return 0;
}
for (int i = 0; i < 3; i++) {
int max_index = i;
for (int j = i + 1; j < n; j++) {
if (arr[j] > arr[max_index]) {
max_index = j;
}
}
swap(arr[i], arr[max_index]);
}
cout << "最大的3个数为:" << arr[0] << " " << arr[1] << " " << arr[2] << endl;
return 0;
}
```
输入n和n个整数,输出其中绝对值最小的数c++
以下是一个C++程序,可以实现输入n和n个整数,并输出其中绝对值最小的数:
```cpp
#include <iostream>
#include <cstdlib>
#include <cmath>
using namespace std;
int main()
{
int n;
cin >> n;
int a, min_num, min_abs;
cin >> a;
min_num = a;
min_abs = abs(a);
for (int i = 1; i < n; i++)
{
cin >> a;
if (abs(a) < min_abs)
{
min_abs = abs(a);
min_num = a;
}
}
cout << min_num << endl;
return 0;
}
```
程序首先读入n,然后读入第一个整数,并将其设为当前绝对值最小的数。之后使用一个循环来读入剩余的n-1个整数,并比较它们的绝对值和当前绝对值最小的数的绝对值,如果更小,则更新绝对值最小的数。循环结束后输出最终的绝对值最小的数即可。