Input:4
Input: 4 2 3 6
Output :29
说明:
我必须为此写一个代码。
这是我的代码:
#include<bits/stdc++.h>
using namespace std;
int main()
{
int num;
cin >> num;
vector<int> box;
for (int i = 0; i < num; i++)
{
int temp;
cin >> temp;
box.push_back(temp);
}
sort(box.begin(), box.end());
vector<int> res;
int sum = box[0];
if (box.size() == 1)
{
cout << sum;
}
else
{
for (int i = 1; i < box.size(); i++)
{
sum = sum + box[i];
res[i] = sum;
}
res[0] = 0;
int result = 0;
for (int i = 0; i < res.size(); i++)
{
result += res[i];
}
cout << result;
}
}
该代码无法正常工作,并且遇到错误,有人可以帮助..吗? 这个问题似乎很简单,但我无法为之提出有效的解决方案。
答案 0 :(得分:1)
鉴于排序后的vector<int> box
,可以将要查找的值分配给foo
,如下所示:
foo += box[0] + box[1];
foo += box[0] + box[1] + box[2];
foo += box[0] + box[1] + box[2] + box[3];
很明显,对于给定的从零开始的元素索引i
,它将被添加到foo
,size(box) - i
次(除了第一个元素将被添加{{ 1}}次。)因此,您可以非常简单地编写如下逻辑:
size(box) - 1
这显然希望auto foo = box.front() * (size(box) - 1);
for(auto i = 1; i < size(box); ++i) {
foo += box[i] * (size(box) - i);
}
中至少有2个元素(如果box
为空,则甚至是未定义的。)因此,显然需要将其包装在box
中-校验。无论如何,如果您信任if
至take your mutable lambda correctly,则可以像这样直接返回该总和:
accumulate