|
kuing
posted 2017-9-7 00:58
要列出来的话,改小一半吧,10个反面,结果为166。
为了更直观地观察,将数字变成有色圆,代码如下。- Clear["Global`*"];
- xo = 6;(*初始位置*)
- n = 2 xo - 2;(*总长*)
- x = xo;
- v = 1;(*方向*)
- fy = 0;(*-1个数*)
- j = 0;(*操作次数*)
- Do[a[i] = 1, {i, n}]
- ball[1] = Graphics[{Red, Disk[]}, ImageSize -> 10];
- ball[-1] = Graphics[{Blue, Disk[]}, ImageSize -> 10];
- ball[0] = Graphics[{LightGray, Disk[]}, ImageSize -> 10];
- lst[j] = Map[ball, Table[a[i], {i, n}]]~Join~{j};
- While[fy < n,
- {j++;
- If[a[x] == 1,
- {a[x] = -1; fy++; v = -v;},
- If[a[x] == -1,
- {a[x] = 0; fy--;},
- {a[x] = 1;}]
- ];
- x = x + v;
- lst[j] = Map[ball, Table[a[i], {i, n}]]~Join~{j};
- }]
- {j, x, v}(*输出最终操作次数、位置、方向*)
- Table[lst[t], {t, 0, j}] // MatrixForm(*列出具体变化*)
Copy the Code 输出的变化如下,其中红色正面,蓝色反面,灰色为空:
|
|