lsmCC 发表于 2023-11-26 21:13:47

为什么我写的不对

#include <bits/stdc++.h>
using namespace std;
//一般求最小值可以考虑小根堆去写
int main()
{
    priority_queue<int,vector<int>,greater<int> >q;
    int n,x;
    cin>>n;
    for(int i=1;i<=n;i++)
    {
      cin>>x;
      q.push(x);

    }
    int res=0;
    if(!q.empty())
    {
      int a= q.top();q.pop();
      int b=q.top();q.pop();
      int sum=a+b;
      res+=sum;
      q.push(sum);

    }
    cout<<res<<endl;

}
题目链接:https://www.luogu.com.cn/problem/P1090

FishC_GPT 发表于 2023-11-26 21:14:01

你的代码中存在几个问题导致编译不通过:

1. 首先,在`priority_queue`的定义中,你没有指定堆中元素的类型。可以修改为`priority_queue<int>`来指定元素类型为整数。

2. 在for循环中,判断条件应该是`i<=n`而不是`i>x`。

3. 在for循环中,你没有读取每个数字x的输入语句。可以通过 `cin >> x;` 来读取每个数字。

4. 在最后的输出语句中,你没有指定要输出的变量res的值。可以修改为 `cout << res;` 来输出结果。

下面是修改后的代码:

#include <iostream>
#include <queue>
using namespace std;

int main() {
    priority_queue<int> q;
    int n;
    cin >> n;
    for (int i = 1; i <= n; i++) {
      int x;
      cin >> x;
      q.push(x);
    }
    int res = 0;
    while (!q.empty()) {
      int a = q.top(); q.pop();
      if (q.empty()) {
            res += a;
            break;
      }
      int b = q.top(); q.pop();
      int sum = a + b;
      res += sum;
      q.push(sum);
    }
    cout << res;
    return 0;
}

希望以上回答能够帮到你!如果还有其他问题,请随时提问。

以上回复来自 -- ChatGPT(FishC官方接口),如未能正确解答您的问题,请继续追问。
页: [1]
查看完整版本: 为什么我写的不对