是c++代码不是c语言
时间: 2024-02-09 11:10:22 浏览: 78
非常抱歉,确实是C语言代码。下面给出不使用STL的C++代码实现:
```cpp
#include <iostream>
#include <cstdio>
#include <algorithm>
using namespace std;
const int N = 10010;
int a[N];
int n;
void down(int u) // 堆排序的下沉操作
{
int t = u;
if(2 * u <= n && a[t] > a[2 * u]) t = 2 * u;
if(2 * u + 1 <= n && a[t] > a[2 * u + 1]) t = 2 * u + 1;
if(t != u) swap(a[u], a[t]), down(t);
}
int main()
{
scanf("%d", &n);
for(int i = 1; i <= n; i++) scanf("%d", &a[i]);
for(int i = n / 2; i >= 1; i--) down(i); // 堆排序的建堆操作
long long ans = 0; // 注意答案可能会溢出
while(n > 1)
{
int x = a[1];
swap(a[1], a[n]);
n--;
down(1);
int y = a[1];
swap(a[1], a[n]);
n--;
down(1);
ans += x + y;
a[++n] = x + y;
down(n);
}
printf("%lld\n", ans);
return 0;
}
```
这里跟C语言的版本基本一致,只是使用了`iostream`和`cstdio`库,以及使用了`swap`函数。其他部分都是标准的C++语法。
阅读全文