【问题标题】:"total += i;" does not work for some reason“总+=我;”由于某种原因不起作用
【发布时间】:2017-12-05 23:20:52
【问题描述】:

由于某种原因,“total += i;”不起作用,当我返回“总计”时,它返回为 0。

long int sumOfGroup(int k) {
    long int special = (k * k) + (k - 1);
    long int limit =  special - ((k-1) * 2);
    cout << special << " " << limit << endl;
    long int total = 0;
    for(int i = special; i <= limit; i - 2){
        total += i;
    }
    return  total;
}


int main() {
    int k;
    cin >> k;
    long answer = sumOfGroup(k);
    cout << answer << endl;
    return 0;
}

如果你不管输入什么都运行这个,答案是 0。我所有的其他数字都是正确的,我很确定它与 for 循环有关。

【问题讨论】:

  • for(int i = special; i &lt;= limit; i - 2) 应该是for(int i = special; i &lt;= limit;i= i - 2)
  • @BillF 仍然给出 0 作为输出
  • limit 小于 special,当然应该是 for(int i = special; i &gt;= limit; i -= 2)。那还是应该 limitspecial + ((k-1) * 2) 并增加 i 代替?或者speciallimit 是不是搞错了?目前尚不清楚您要做什么
  • special 不是总是比limit 大吗?
  • @NickA 无论是增加还是减少都不起作用

标签: c++ for-loop


【解决方案1】:

你的total += i 没有任何效果,因为它永远不会被执行!

在您尝试进入循环之前打印的speciallimit 的值是多少?

【讨论】:

  • 它没有运行的事实并不能真正回答问题;p,很明显(我认为即使对 OP 来说它也没有运行),问题更多的是为什么不运行它
  • 什么意思它没有被执行?在代码中,它显示我打印了特殊值和限制值。如果您 k = 3,则特殊应等于 11,限制为 7。总数应等于 27。但事实并非如此
  • @undertaker - for 中间的条件是 while 条件,而不是 until 条件。如果i 大于limit,则循环永远不会执行。
  • @undertaker 如果special 为11,则循环开始时将11 分配给循环的i 变量。然后将i 的值与limit 进行比较,以决定是否执行循环体。唉,你说limit 是7,所以i&lt;=limit 条件不满足(因为'11&lt;=7' 不成立),整个循环被跳过。为什么不使用调试器(或者只是在循环内的输出中打印一个星号)来测试循环是否实际执行......?
【解决方案2】:

为你的循环试试这个:

for(int i = special; i >= limit; i -= 2){
    total += i;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多