所以这个函数的工作原理是,如果 n2 是 n1 的排列,则它假设返回 1。如果 n2 可以通过重新排列 n1 的数字来形成,那么它就是 n1 的排列。 (即 237654 是 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;
}
最佳答案
回文确实是为了避免检查空字符。
关于c - 请解释一下这个排列算法是如何工作的以及这个回文算法是如何工作的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31216171/