如何将循环转换为数学方程式?
我的程序中有以下两个循环,我正在尝试将它们写成数学方程式,但是我很难找到一个简洁的方法来执行此操作:
// 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
。 假设正nr
和nvr
,0 <= j < nr
并且:
- 对于
i = 0 ... j-1
array[i] = nepr + 1
i = 0 ... j-1
array[i] = nepr
fori = 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, nvr
是int
。
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); }