2015-07-04 37 views
-3

所以這個函數如何工作是如果n2是n1的置換,它假設返回1. n2是n1的置換,如果它可以形成的話通過重新排列n1的數字。 (I.E.27654是743526的置換)。請解釋這個置換算法是如何工作的以及這個迴文算法是如何工作的

我不明白髮生了什麼事如果有人可以逐行解釋我會很感激,謝謝。

int is_permutation_division (unsigned long n1, unsigned long n2) 

{ 
    int a[10] = {0,0,0,0,0,0,0,0,0,0}; 
    size_t i; 

    while (n1 != 0) 
    { 
     a[n1 % 10]++; // Edit: little syntax error 
     n1 /= 10; 
    } 

    while (n2 != 0) 
    { 
     a[n2 %10]--; 
     n2 /= 10; 
    } 

    for (i=0; i<10; i++) 
    { 
     if (a[i] != 0) 
     { 
      return 0; 
     } 
    } 
    return 1; 
} 

這個下一個函數測試一個字符串是否是迴文。一個詞是迴文,如果它的拼寫向後相同(即賽車rac ecar)

我有一條關於我評論過的一條線的問題。我只想知道它的j-1是否因爲你不想處理空字符

int is_palindrome(const char s[]) 

{ 
size_t i,j; 

for (i=0; j<strlen(s); i<j; i++; j--) 
{ 
    if(s[i] != s[j-1]) /*is it j-1 because you don't want to check the null character? */ 
    { 
     return 0; 
    } 
} 
return 1; 
} 
+0

是的,它因爲你不想檢查空字符。 – Wazaaaap

+0

我認爲第一個應該是']而不是''' – Wazaaaap

+0

是的,你是對的謝謝 – noname

回答

0

迴文確實是爲了避免檢查空字符。

0
while (n1 != 0) 
{ 
    a[n1 % 10]++; // adds one to the array position of last digit. i.e: 42235 -> a[5] goes up by 1. 
    n1 /= 10; //deletes last number. i.e: 42235 -> 4223 
} 

這使得a與每個a[i](第i個位置)的陣列包含位i出現在數的次數。例如,與n1 =346576,a將是{1, 2, 2, 3, 1, 1, 2, 1, 0, 0}

然後,下面的部分會做同樣的,但減少數組。我們的數字是一個排列iff a再次是一個0的數組。

對於第二個,老實說,我不明白它...如果for循環可以分成5個子句,我不知道...但基本上,你想比較從第離開,右邊第i個字母,我從第一個到總數的一半。可能有一些+ -1在這裏和那裏使它工作。

0
  • is_permutation_division功能,

    //assume n1 = 237654, n2 = 743526 
    
    int is_permutation_division (unsigned long n1, unsigned long n2) 
    { 
    int a[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; 
    //   ^^^^^^^^^^
    //calc num of '0' '1' '2' '3' '4' '5' '6' '7' '8' '9' symbols of n1 
    size_t i; 
    
    while (n1 != 0) 
    { 
        a[n1 % 10]++; //a[0] keeps num of '0', a[1] keeps num of '1',...of n1 
        n1 /= 10; 
    }// now, a[] = {0,0,1,1,1,1,1,1,0,0}, for n1 = 237654 
    
    while (n2 != 0) 
    { 
        a[n2 %10]--;// to check the count of '0','1','2'... of n2 
        n2 /= 10; 
    }//now, a[] = {0,0,0,0,0,0,0,0,0,0}, since n2 = 743526 
    //because, n2 has the same digital symbol array, 
    //all elements of a[] would be 0 by count back 
    
    for (i=0; i<10; i++) 
    { 
        if (a[i] != 0) 
        { 
         return 0;//if there is a non zero element, not permutation, return 
        } 
    }// now, a[] is full of 0 
    return 1;//then n2 is permutation of n1 
    } 
    
  • is_palindrome功能,

    for (i=0; j<strlen(s); i<j; i++; j--) //這裏的一些

    的問題應該是:

    for (i=0, j = strlen(s); i<j; i++, j--)