【问题标题】:Is it due to operator precedence?是因为运算符优先级吗?
【发布时间】:2020-08-10 11:56:57
【问题描述】:

我有以下代码:

#include<algorithm>
#include<cstdio>
#include<iostream>
#include<vector>
#include<numeric>

using namespace std;

int maxScore(vector<int>& cardPoints, int k) {
    if(k==cardPoints.size()) return accumulate(cardPoints.begin(), cardPoints.end(), 0);

    int endSum=accumulate(cardPoints.begin()+(cardPoints.size()-k), cardPoints.end(), 0);
    int maxValue=endSum;
    int i=0;
    int j=cardPoints.size()-k;

    while(i<k && j<cardPoints.size()) {
        endSum-=cardPoints[j++]+cardPoints[i++];   //-> will change this line
        maxValue=max(maxValue, endSum);
    }

    return maxValue;
}

int main() {
    vector<int> v={100,40,17,9,73,75};
    cout<<maxScore(v, 3);

    return 0;
}

我得到的输出是:157。 但是,如果我将上面注释的行更改为:

endSum=endSum-cardPoints[j++]+cardPoints[i++];

我得到的输出是248。分别为herehere 的实时示例。我认为我在上面的两个陈述中没有做任何不同的事情。我认为这可能是由于ij 的后增量操作。由于它们都在一行上执行,我无法使用任何打印语句进行调试。

有人可以指出为什么我得到不同的输出吗?

【问题讨论】:

    标签: c++ syntax operator-precedence post-increment


    【解决方案1】:

    这一行:

    a -= b + c;
    

    相当于:

    a = a - (b + c);
    

    a = a - b - c;
    

    等同于:

    a = a - b + c;
    

    【讨论】:

      【解决方案2】:
      endSum -= cardPoints[j++] + cardPoints[i++];
      

      = 的等效语句是:

      endSum = endSum - (cardPoints[j++] + cardPoints[i++]);
      

      endSum = endSum - cardPoints[j++] - cardPoints[i++];
      

      【讨论】:

        猜你喜欢
        • 2019-02-02
        • 2011-07-07
        • 1970-01-01
        • 2011-06-21
        • 2013-02-24
        • 2012-08-10
        • 2020-03-05
        相关资源
        最近更新 更多