Rock, Scissors, Paper 这题真是郁闷,题没怎么看明白,具体按什么顺序来不明白,试了试自己理解错了。 只到看别人代码是如何处理的。 #include <iostream> #include <cstring> #include <cmath> #include <cstdlib> #include <algorithm> #include <string> #include <cstdio> #include <climits> #include <queue> using namespace std; bool pk(char c1, char c2) { if (c1 == 'R' && c2 == 'S') return true; if (c1 == 'S' && c2 == 'P') return true; if (c1 == 'P' && c2 == 'R') return true; return false; } int main() { char map[120][120], tmp[120][120]; int m, n, d, t; cin >> t; for (int k = 0; k < t; k++) { if (k) cout << endl; cin >> m >> n >> d; for (int i = 0; i < m; i++) cin >> map[i]; while (d--) { memcpy(tmp, map, sizeof(tmp)); for (int i = 0; i < m; i++) for (int j = 0; j < n; j++) { if (j - 1 >= 0) if (pk(tmp[i][j - 1], map[i][j])) { map[i][j] = tmp[i][j - 1]; continue; } if (j + 1 < n) if (pk(tmp[i][j + 1], map[i][j])) { map[i][j] = tmp[i][j + 1]; continue; } if (i + 1 < m) if (pk(tmp[i + 1][j], map[i][j])) { map[i][j] = tmp[i + 1][j]; continue; } if (i - 1 >= 0) if (pk(tmp[i - 1][j], map[i][j])) { map[i][j] = tmp[i - 1][j]; continue; } } } for (int i = 0; i < m; i++) cout << map[i] << endl; } return 0; } 还是不大理解,其中4个if语句无顺序,一想确实没关系。但感觉有点不合逻辑,只能认为所有操作都在同一时间完成。唉……