题目传送门

题意

游戏规则:三个杯子一个球,知道杯子交换的次数和最后球所在的位置,问初始球在哪一个杯子中。
杯子交换的规制:

  1. 左边杯子和中间的杯子交换(第奇数次交换)
  2. 右边杯子和中间的杯子交换(第偶数次交换)

思路

由于杯子数目是固定的,且交换有规则,可以先尝试下前几次交换的情况
初始 0 1 2

  1. 第一次交换 1 0 2
  2. 第二次交换 1 2 0
  3. 第三次交换 2 1 0
  4. 第四次交换 2 0 1
  5. 第五次交换 0 2 1
  6. 第六次交换 0 1 2

发现6次交换后杯子又恢复到初始的位置
所以可以将这6种情况的位置情况存到一个二维数组ans[][],根据交换次数n和最终位置x可得出初始位置是ans[n%6][x]

代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include<iostream>
using namespace std;
int ans[7][3] = {
0,1,2,
1,0,2,
1,2,0,
2,1,0,
2,0,1,
0,2,1,
0,1,2
};
int main() {
__int64 n;
int x;
while (cin >> n >> x) {
n %= 6;
cout << ans[n][x] << endl;
}
return 0;
}

留言

2017-03-12

⬆︎TOP