2014-09-23 51 views
-6
for (int i = 0; i< n; i++) 
    arr[arr[i]%k] += k; 

我新的編程和我碰到這段代碼here來了。任何人都可以解釋它做了什麼?C [a]在C中做什麼?

+1

你可以參考http://stackoverflow.com/questions/5739024/finding-duplicates-in-on-time-and-o1-space – ACcreator 2014-09-23 06:46:52

+0

讀好C編程的書(和C++不是C)。編譯所有警告和調試信息('gcc -Wall -g')。在調試器('gdb')中逐步運行代碼 – 2014-09-23 06:47:32

+0

我知道它正在將值加上k。這是arr [arr [i]]我感到困惑的部分。 – PapluTaplu 2014-09-23 06:48:43

回答

0

翻譯成:

for (int i = 0; i< n; i++) { 
    int temp1 = arr[i]; 
    int temp2 = temp1%k; 
    int temp3 = arr[temp2]; 
    arr[temp2] = temp3+k; 
} 

編輯:感謝校正@R薩胡

+0

這是不正確的。 'temp3 = arr [i]%k = temp1%k'。 – 2014-09-23 06:55:20

+0

還是不對的。 – 2014-09-23 06:59:35

+0

'temp1中= ARR [I]%k'和'ARR [temp1目錄] = ARR [temp1目錄] + K;'就足夠了。 – 2014-09-23 07:00:21

0

循環

for (int i = 0; i< n; i++) 
    arr[arr[i]%k] += k; 

相當於

for (int i = 0; i< n; i++) 
{ 
    int temp1 = arr[i]; 
    int temp2 = temp1%k; 
    arr[temp2] = arr[temp2]+k;  
} 
0
arr[arr[i]%k] += k; 

arr // (array) 
arr[i]; // hereinafter "x" (The i-th element of the array) 
x%k; // hereinafter "res" (result of the modulo) 
arr[res]; //(The res-th element of the array)