2016-12-25 82 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