【问题标题】:change of variable value in for loop is not updated in original variablefor循环中变量值的更改未在原始变量中更新
【发布时间】:2021-06-09 07:24:18
【问题描述】:
#include<bits/stdc++.h>
using namespace std;
#define ll long long int
int main()
{
   ll n,k;
   int count=0;
   cin>>n>>k;
   for(int i=0;i<k;i++)
   {
       if(n%10!=0){
           n=n--;
       }
       else {
           n=n/10;
       }
   }
   cout<<n<<endl;
}

在for循环中执行减量操作后,n的值没有改变

【问题讨论】:

  • 不确定什么是好的副本。这是相关的:stackoverflow.com/questions/56179965/pre-vs-post-increment。你想要n--; 而不是n = n--;
  • n=n-- 是未定义的行为。另外:竞争性编程会强化不良习惯,一旦您进行任何真正的编程,您就需要忘记这些习惯。切勿使用#include&lt;bits/stdc++.h&gt;using namespace std;#define ll long long int。始终使用-Wall -Werror
  • 递减 分配 - 不要同时尝试两者。在 n----nn -= 1n = n - 1 之间进行选择。 (并阅读它们的全部含义。)
  • 这是一个糟糕的主意#define ll long long int,尤其是当您可以轻松地将其替换为适当的typedef 或使用指令时

标签: c++ loops for-loop variables


【解决方案1】:

当你用n-- 减少n 时,你将它分配回来

n = n--;

只需n--; 就足够了(清理代码):

#include <iostream>

int main()
{
    long long n,k;
    std::cin >> n >> k;
    for(int i = 0; i < k; i++)
    {
        if (n % 10 != 0) { n--; }
        else { n /= 10; }
    }
    std::cout << n << '\n';
}

输入:15 6

输出:1

像往常一样,分配和递增/递减应该分开进行,或者it will lead to undefined behaviorn -= 1n = n-1--n 也可以完成这项工作。

另见

【讨论】:

  • @UjjwalBhardwaj 如果有效,请将其中一个答案标记为正确,以便其他搜索此答案的用户知道什么有效。
  • @Slava 抱歉,我已经重写它以消除其他不良做法。
【解决方案2】:

您正在递减 N 的值,但为其分配旧值。替换:

n=n--;

与:

n--;

【讨论】:

  • "您正在减少 N 的值,但为其分配旧值。"这不是很正确的说法
猜你喜欢
  • 2020-08-28
  • 1970-01-01
  • 1970-01-01
  • 2021-12-17
  • 1970-01-01
  • 2019-11-10
  • 2019-10-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多