题解 | 旺仔哥哥转圈圈
旺仔哥哥转圈圈
https://www.nowcoder.com/practice/739afacabadd463d9b73b23514bb6d5d?tpId=383&tags=&title=&difficulty=0&judgeStatus=0&rp=0&sourceUrl=%2Fexam%2Foj%3FquestionJobId%3D10%26subTabName%3Donline_coding_page
class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * 计算出旺仔哥哥最后会站在哪位小朋友旁边 * @param a int整型vector 第 i 个小朋友的数字是 a_i * @param m int整型 表示旺仔哥哥的移动次数 * @return int整型 */ int stopAtWho(vector<int>& a, int m) { int n = a.size(); int p = 1; // 初始位置是1 for (int i = 1; i <= m; ++i) { int current_pos = p - 1; // 转换为0开始 int step = a[current_pos]; // 读取移动步数 int new_pos = (current_pos - step) % n; // 直接减,负数出来不怕 if (new_pos < 0) { // 如果出来是负数,毕竟是个环,直接+环长就能去到应该在的位置! new_pos += n; // 加过去刚好是0开始标准的下标 } p = new_pos + 1; //换回1开始 } return p; } };