有一个数组包含另一个数组的属性。在第一个周期中,它获取一个用于获取第二个索引的索引,然后用于更新第一个索引。关于这个代码的推理是困难的,因为标记是自我修改的。
我在问是否有一种方法可以构建代码,这样更容易推理。根据这些阵列的用途,可能没有
int table[3][3] {
{ 1,1,1 },
{ 2,2,2 },
{ 1,1,1 }
};
int arr[2][3] {
{ 0,1,2 },
{ 1,2,0 }
};
循环1
int& A = arr[0][1], // 1
& B = arr[1][A]; // 2
A = table[A][B]; // 2
循环2
A = arr[0][1], // 2
B = arr[1][A]; // 0
A = table[A][B]; // 1
循环。。。
根据您显示的内容,
- CCD_ 1未被修饰
arr
由arr
或table
中的现有值修改,因此仅由0、1、2修改
您最多有3**6(729(个有效状态,并且具有确定性转换。
所以你的总循环长度最多是729。
如果您创建了完整周期的数组,您可能很容易推理。
这里我们只有3个状态:
0 1 2
1 2 0
|
v
0 1 2 0 2 2
1 0 0 <-> 1 0 0