如果有一种方法可以构造代码,使其更容易推理



有一个数组包含另一个数组的属性。在第一个周期中,它获取一个用于获取第二个索引的索引,然后用于更新第一个索引。关于这个代码的推理是困难的,因为标记是自我修改的。

我在问是否有一种方法可以构建代码,这样更容易推理。根据这些阵列的用途,可能没有

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未被修饰
  • arrarrtable中的现有值修改,因此仅由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 

最新更新