如何将循环转换为数学方程式?

时间:2016-07-06 18:01:21

标签: c++ c algorithm math

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

// 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)

但我不确定如何将第二个循环纳入等式,或为其编写第二个等式。

5 个答案:

答案 0 :(得分:3)

只需将其表达为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)

答案 1 :(得分:1)

不完全清楚你问的是什么,但是以下内容在一个循环中做同样的事情。

j = nvr % nr

<小时/> [编辑]在没有任何循环的随意语言中,上述内容相当于......

  

nr。假设为nvr0 <= j < nrarray[i] = nepr + 1

     
      {li> i = 0 ... j-1 array[i] = nepr   {li> i = j ... nr-1 {{1}}   

答案 2 :(得分:0)

在第二个循环中,条件检查的nr-1比较多。

如果我理解你的问题,你可以像

那样表达
  

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

答案 3 :(得分:0)

这是LaTeX。要查看或编辑LaTeX,请单击等式。

latex equation

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

答案 4 :(得分:0)

以为我会尝试在@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);
}