本文共 999 字,大约阅读时间需要 3 分钟。
循环右移数组的问题通常可以通过将数组分成两部分来处理,然后将后面的部分移到前面。这种方法的时间复杂度是O(N),且实现起来相对简单。以下是详细的解决方案:
以下是具体的实现代码:
#includeint main() { int n, m; scanf("%d %d", &n, &m); m %= n; // 计算有效位移 int a[100]; for (int i = 0; i < n; ++i) { scanf("%d", a + i); } // 处理循环右移 int new_a[100]; for (int i = 0; i < n; ++i) { new_a[i] = a[(i + n - m) % n]; } // 输出结果 printf("循环右移后的数组是: "); for (int i = 0; i < n; ++i) { if (i != 0) { printf(" "); } printf("%d", new_a[i]); } printf("\n"); return 0;}
解释:
scanf
函数读取输入,首先是两个整数N和M,然后是包含N个整数的数组。m %= n
确保M在0到N-1之间,避免不必要的循环。这种方法高效且易于实现,能够在O(N)时间复杂度内完成任务,适用于N较小的情况。
转载地址:http://dzph.baihongyu.com/