【问题标题】:How to turn for loop into a math equation?如何将for循环变成数学方程?
【发布时间】:2023-03-08 22:01:01
【问题描述】:

我的程序中有以下两个循环,我试图将它们写成数学方程式,但我很难找到一种简洁的方法:

// Loop1
for (int i = 0; i < nr; i++) {
    array[i] = nepr;
}

// Loop2
for (int i = 0; i < (nvr % nr); i++) {
    array[i]++;
}

代码是完整的函数,但我试图在我正在编写的文档中表达这些循环。

非常感谢任何帮助。

到目前为止,我有这个:

array[i] = nepr, i = 0,...,(nr-1)

但我不确定如何将第二个循环合并到方程中,或者为其编写第二个方程。

【问题讨论】:

    标签: c++ c algorithm math


    【解决方案1】:

    只需将其表达为piecewise-defined function

     f(x) = {nepr + 1 if x <  (nvr % xr)}  
            {nepr     if x >= (nvr % xr)}
    

    你也可以用Heaviside step function来定义它:

     f(x) = nepr + H((nxr % xr) - x)
    

    【讨论】:

    • 我相信你的符号没有考虑到 x 是离散值的。你的方程是 x 是连续的。如果我错了,请纠正我。
    • @Veridian 这不是直接必要的,方程仍然有效。如果要表示x必须是整数,单独声明即可。
    • @chux 似乎 nvr 总是积极的,但我还是改变了它。
    • 是的,假设nvr, nr 肯定会简化问题。怀疑 OP 是否想要完整的int 解决方案。
    【解决方案2】:

    不完全清楚这就是你要问的,但以下在一个循环中做同样的事情。

    for (int i = 0, j = nvr % nr; i < nr; i++) {
        array[i] = nepr + (i < j);
    }
    


    [编辑] 在没有任何循环的随意语言中,以上等同于...

    j = nvr % nr。假设正面nrnvr0 &lt;= j &lt; nr 和:

    • array[i] = nepr + 1i = 0 ... j-1
    • array[i] = nepri = j ... nr-1

    【讨论】:

    • 谢谢,我想我可以这样做:array[i] = nepr + (i
    • 假设需要肯定。代码确实失败了nvr = 7; nr = -3;
    • @chux 对。我编辑了答案以阐明积极性假设。
    【解决方案3】:

    在您的第二个循环中,条件检查有很多 nr-1

    如果我理解你的问题,你可以这样表达

    array[i] = array[i] + 1 , i = nvr % nr ,...,(nr-2)

    【讨论】:

    • 缺少对nvr的依赖
    • @Veridian 什么样的依赖?最终你会使用nvr % nr 值,对吧?
    【解决方案4】:

    这是在 LaTeX 中。要查看或编辑 LaTeX,请单击方程式。

    := 符号表示赋值。您也可以通过将array_i 替换为array(i)(一个定义在开放整数范围上的函数)以函数方式编写它。

    【讨论】:

    • 可能你应该加上 i ∈ N
    • @Logman 似乎与 i 被用作数组的索引这一事实有关
    • @GuyGreer 但让我们保持正式;)
    【解决方案5】:

    我想我会尝试在@dxiv 的基础上发布完整的int 范围搜索,这在nr, nvr 是肯定的情况下效果很好 - 通常情况下。

    假设nr, nvrint

    assert(nr != 0);
    assert(nr != -1 || nvr >= -INT_MAX);  // avoid -2147483648 % -1
    int j = nvr % nr;
    int ij = max(i,j);
    for (int i = 0; i < ij; i++) {
        array[i] = nepr + (i < j);
    }
    

    【讨论】:

      猜你喜欢
      • 2010-09-28
      • 2022-06-14
      • 1970-01-01
      • 1970-01-01
      • 2022-11-19
      • 2018-03-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多