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

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

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

但是我不确定如何将第二个循环结合到等式中,或者为它写出第二个等式。

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

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

[编辑]在没有任何循环的休闲语言中,上述相当于......

j = nvr % nr 。 假设正nrnvr0 <= j < nr并且:

  • 对于i = 0 ... j-1 array[i] = nepr + 1 i = 0 ... j-1
  • array[i] = nepr for i = j ... nr-1

只需将其表示为分段定义的函数 :

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

您也可以根据Heaviside步骤函数定义它:

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

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

如果我正确理解你的问题,你可以表达它

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

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

乳胶方程

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

以为我会尝试在@dxiv精确答案上发布一个完整的int范围soukltion基础,当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); }