题目:$\textsf{\textcolor{#F39C11}{P1207 [USACO1.2] 双重回文数 Dual Palindromes}}$

提交记录:

错误原因:在 for 循环内进行 if。

涉事代码片段:

while (n)
{
    for (int b = 2, pal = 0; b <= 10; b++)
        if (pal >= 2) { cout << i << "\n", n--; break; }
        else if (ifpal(base(i, b))) pal++;
    i++;
}

当 $b = 10$ 时若 $pal = 1$ 且十进制下这个数 是回文数,for 循环直接结束了从而漏掉这个数字。

解决:不写 else。

while (n)
{
    for (int b = 2, pal = 0; b <= 10; b++)
    {
        if (ifpal(base(i, b))) pal++;
        if (pal >= 2) { cout << i << "\n", n--; break; }
    }
    i++;
}