题目:https://pintia.cn/problem-sets/994805260223102976/problems/994805316250615808

这题参考很久以前王道上的算法,自己写了个reverse

代码

  1. #include<cstdio>
  2. void getprint(int a[],int n)
  3. {
  4. for (int i = 0;i < n;i++)
  5. {
  6. printf("%d",a[i]);
  7. if(i!=n-1) printf(" ");
  8. }
  9. printf("\n");
  10. }
  11. void reverse(int a[],int min ,int max)
  12. {
  13. for (int i = 0;i<(max-min+1)/2;i++)
  14. {
  15. int temp = a[min + i];
  16. a[min + i] = a[max - i];
  17. a[max - i] = temp;
  18. }
  19. }
  20. int main(){
  21. int n,m;
  22. int temp;
  23. int l = 0;
  24. scanf("%d %d",&n,&m);
  25. m = m%n;
  26. int a[100];
  27. for (int i = 0;i < n;i++)
  28. {
  29. scanf("%d",&a[i]);
  30. }
  31. if(m == 0)
  32. {
  33. getprint(a,n);
  34. return 0;
  35. }
  36. else{
  37. //交换0~m-1
  38. reverse(a,0,n-m-1);
  39. //getprint(a,n);
  40. //交换m~n-1
  41. reverse(a,n-m,n-1);
  42. //getprint(a,n);
  43. //全部交换
  44. reverse(a,0,n-1);
  45. getprint(a,n);
  46. return 0;
  47. }
  48. }