我的程序中有以下两个循环,我正在尝试将它们写成数学方程式,但我很难找到一个简洁的方法:
// 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)
但我不确定如何将第二个循环纳入等式,或为其编写第二个等式。
答案 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
。假设为nvr
和0 <= j < nr
,array[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)
答案 4 :(得分:0)
以为我会尝试在@dxiv完整答案上发布一个完整的int
范围搜索结果,当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);
}