【发布时间】:2021-04-02 07:36:33
【问题描述】:
我输入一个向量A = {0,10}。
然后我将2 添加到每个小于平均值的元素中,并从每个大于平均值的元素中减去2。在这个操作之后,新的向量是{2,8},但是当我尝试打印这个向量的最大值时,由于某种原因,我得到了0。
int smallestRangeI(vector<int>& A, int K) {
int sum = 0;
int avg = accumulate(A.begin(), A.end(), sum);
avg = avg / A.size();
for(int i = 0; i<A.size();i++)
{
if(A[i]<avg) A[i]=A[i]+K;
else A[i]=A[i]-K;
}
return *max(A.begin(), A.end());
}
int main() {
vector<int> A = {0,10};
int K = 2;
cout<<smallestRangeI(A,K);
return 0;
}
【问题讨论】:
-
您是否尝试过在调试器中逐语句逐句执行代码以查看发生了什么以及所有计算的结果是什么?提示:这有助于将语句放在不同的行上。
-
我建议通过添加缺少的标题来完成问题。在这种情况下,这无关紧要,但为了让您的示例编译,我们必须更改的所有内容都是我们改变行为并意外引入另一个错误或意外修复您正在寻找的错误的机会。
-
附带说明,您对
sum的使用是错误的。它应该看起来更像这样:int sum = accumulate(A.begin(), A.end(), 0); int avg = sum / A.size(); -
实际上我在最后一秒对代码进行了一些更改,但无法跟踪合理的变量名称,哈哈。嗯,你说的完全正确哈哈