将数组向右而不是向左旋转

Posted

技术标签:

【中文标题】将数组向右而不是向左旋转【英文标题】:Rotate array to right instead of left 【发布时间】:2018-02-25 03:54:21 【问题描述】:

我有一些将数字数组向左旋转的代码,但我需要它来将其向右旋转。网上还有其他代码可以将数组向右旋转,但该代码只允许您旋转数组中间的数字。

我尝试以不同的方式减少循环并更改其初始化位置,但似乎没有以正确的方式旋转。

预期输出:如果数组是 1, 2, 3, 4, 5, 6, 7。那么它应该看起来像:7, 1, 2, 3, 4, 5, 6

当前输出:2, 3, 4, 5, 6, 7, 1

#include <iostream>
using namespace std;

/*Function to left Rotate arr[] of size n by 1*/
void leftRotatebyOne(int arr[], int n);

/*Function to left rotate arr[] of size n by d*/
void leftRotate(int arr[], int d, int n)

  int i;
  for (i = 0; i < d; i++)
    leftRotatebyOne(arr, n);


void leftRotatebyOne(int arr[], int n)

  int i, temp;
  temp = arr[0];
  for (i = 0; i < n-1; i++)
     arr[i] = arr[i+1];
  arr[i] = temp;


/* utility function to print an array */
void printArray(int arr[], int size)

  int i;
  for(i = 0; i < size; i++)
    cout << arr[i] << " ";




/* Driver program to test above functions */
int main()

   int arr[] = 1, 2, 3, 4, 5, 6, 7;
   printArray(arr, 7);   

   leftRotate(arr, 1, 7);
   cout << "___" << endl;

   printArray(arr, 7);
   getchar();
   return 0;

【问题讨论】:

从您的问题中不清楚您提供的代码是您的工作向左旋转代码(在这种情况下,它几乎没有相关性),还是您没有工作的向右旋转尝试'懒得改名。您还可以准确解释您的尝试出了什么问题:它从输入中产生什么输出,您期望什么,以及您不了解如何从一个到另一个。 您是否排除只使用std::rotate 【参考方案1】:

leftRotateByOne 是这里的关键函数。其他可以保持不变。看看它在做什么,最好用笔和纸来跟踪操作:

    保留第一个元素的副本。 将所有元素移至“左”(即,移至具有索引的元素 少一个),注意不要覆盖以后需要的任何内容。 将第一个元素放在最后。

所以你需要做相反的事情:

    保留最后一个元素的副本。 将所有元素移动到“右边”(即,移动到具有索引的元素 还有一个),注意不要覆盖以后需要的任何内容。 将最后一个元素放在首位。

例如:

void rightRotatebyOne(int arr[], int n)

  int i, last;
  last = arr[n-1];
  for (i = n-1; i > 0; i--)
     arr[i] = arr[i-1];
  arr[0] = last;

【讨论】:

非常感谢希思和超级。我几乎让它工作了,但在你的帮助下,我让它完全工作了!我似乎无法弄清楚如何指定不同的起点。例如原始数组是 1, 2, 3, 4, 5, 6, 7。然后它应该看起来像。 1, 7, 2, 3, 4, 5, 6 我必须做什么才能让它从 2 开始?我已尝试更改 i 等于但似乎不起作用。 很好@super。所以你不想在轮换中包含第一个元素?只是不要让索引达到 0。所以使用i&gt;1arr[1] 哦,这很有意义@Heath。再次感谢你!这很有帮助。我希望投票不会因为我的问题已经解决而一直为负。

以上是关于将数组向右而不是向左旋转的主要内容,如果未能解决你的问题,请参考以下文章

UIButtons 在向右旋转时起作用,但在向左旋转时不起作用。嗯?

我制作了一个 android 相机应用程序,但我想将它向左旋转 90 度和向右旋转 90 度,我该怎么做?

在 JavaScript 中旋转数组中的元素

左旋转数组 C++

如何将数组中的元素向右移动?

手动向左旋转横向模式的坐标系