2015-07-04 36 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--)