2016-12-25 81 views
-3

所以,我只是解决了问题就在这里:Array Left Rotation - Hackerrank 后,我解决了,我查别人的代码 ,我很好奇,为什么自己怎么代码的工作,所以你们可以帮助我找到了解他的代码如何工作。 我的代码:阵列修改[左旋转]

#include <iostream> 
using namespace std; 
int main() 
{ 
int n; 
int d; 
cin >> n >> d; 
int arr[n]; 
int lrotate[n]; 
for (int i=0; i<n; i++) 
{ 
    cin >> arr[i]; 
} 
if (n-d>0) 
{ 
    for (int i=d; i<n;i++) 
    { 
     lrotate[i-(d)]=arr[i]; 
    } 
    for (int i=0; i<n; i++) 
    { 
     lrotate[i+(n-d)]=arr[i]; 
    } 
    for (int i=0; i<n; i++) 
    { 
     cout << lrotate[i] << " "; 
    } 
} 
} 

而且这里是他的代码:

#include <iostream> 
using namespace std; 
int main() { 
int N, d, i; 
cin >> N >> d; 
int start = N - d; 
int *arr = new int[N]; 
for (i=0; i<N; ++i) 
{ 
    if (start == N) 
     start = 0; 
    cin >> arr[start++]; 
} 
for (i=0; i<N; ++i) 
    cout << arr[i] << " "; 
return 0; 
} 

很抱歉,如果这是一个小白的问题,我很好奇他的代码是如何工作的,尤其是第7行以及第12行

+0

第二个代码不旋转,而是它读取数字以所需顺序排列。 – drescherjm

+1

***我很好奇他的代码如何工作,特别是第7行和第12行***这是了解如何使用调试器的最佳时机。 – drescherjm

+0

就这样,当有人发布无代码问题时,我们通常会问“到目前为止您尝试了些什么?”。另一方面,在这里,你到目前为止有什么了解? –

回答

0

他用简单的算法来解决这个问题。

  1. 如果N == d,数组中没有变化。
  2. 如果'start'不等于0(例如:start = 3意味着数组必须旋转3次),则该数组将从索引3开始填充到数组的末尾。
  3. 因此开始逐渐递增,并且如果启动== N,然后启动成为0,并再次阵列填充在索引0至索引3