【问题标题】: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

标签: c++ arrays loops sorting rotation


【解决方案1】:

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

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

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

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

例如:

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。再次感谢你!这很有帮助。我希望投票不会因为我的问题已经解决而一直为负。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-31
  • 2017-03-05
  • 2023-04-10
  • 2010-09-18
  • 2021-09-09
相关资源
最近更新 更多