数组元素循环右移问题(有样例代码).c 923 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. #include <stdio.h>
  2. void rightRotate(int arr[], int n, int m) {
  3. int temp[n], i;
  4. // 计算实际移动的位置
  5. m = m % n;
  6. // 将数组最后m个元素移到临时数组的前面
  7. for (i = 0; i < m; i++) {
  8. temp[i] = arr[n - m + i];
  9. }
  10. // 将数组前n-m个元素移动到临时数组的后面
  11. for (i = 0; i < n - m; i++) {
  12. temp[m + i] = arr[i];
  13. }
  14. // 将临时数组的内容复制回原数组
  15. for (i = 0; i < n; i++) {
  16. arr[i] = temp[i];
  17. }
  18. }
  19. int main() {
  20. int n, m;
  21. // 读取N和M
  22. scanf("%d %d", &n, &m);
  23. int arr[n], i;
  24. // 读取N个整数
  25. for (i = 0; i < n; i++) {
  26. scanf("%d", &arr[i]);
  27. }
  28. // 右移M位
  29. rightRotate(arr, n, m);
  30. // 输出结果
  31. for (i = 0; i < n; i++) {
  32. if (i > 0) {
  33. printf(" ");
  34. }
  35. printf("%d", arr[i]);
  36. }
  37. printf("\n");
  38. return 0;
  39. }