如何应用模数,以使索引永远不会为0?

问题描述

假设我索引一周中的某几天,从1(星期一)和7(星期日)开始。我有四个数组x,y,z和r,它们分别存储一周中每一天的变量。例如,x [1]是星期一赚取的收入金额,y [7]是从星期日结转的收入金额,而z [6]是从星期六赚取的收入金额。 星期一的总收入为x [1] + y [7] + z [6] = r [1]。同样,周二的总收入为x [2] + y [1] + z [6] = r [2]。

我正在尝试编写如下的for循环:

for i in 1:7
    x[i] + y[i-1] + z[i-2] = d[i]
end

当i = 1且i = 2时,索引不会小于或等于0(我的索引从1开始,如果结果为0,则会出现超出范围的错误)。

我尝试使用模函数解决此问题,但是我意识到在某些情况下,无论我尝试使用什么值,我都将获得0。例如,加7然后应用模7可以确保当i = 1时z [i-2]为z [6],但是当i = 1时给出y [i-1] = y [0]。

for i in 1:7
        x[(i+7)%7] + y[(i-1+7)%7] + z[(i-2+7)%7] = d[(i+7)%7]
end

对此有有效的解决方案吗?

解决方法

在模内加6而不是7,在模外加1。

( i + 6 ) % 7 + 1