USACO 1.2 Dual Palindromes

xiaoxiao2021-02-28  61

题目大意:

给出2个十进制数N和S,求N个大于S的双重回文数, 双重回文数为在二到十进制下满足至少2种进制转换后能够形成回文数的数。

1 <= N <= 15 0 < S < 10000

题解:

从s+1开始去向后枚举 对于每个数进行10次进制转换然后判断是否回文,进制转换可以用依次取模后将所得结果取反,而这题因为取不取反都不影响所以我没去弄,不过转换后注意前导0的问题,以及要满足2种及以上。

代码:

#include<bits/stdc++.h> using namespace std; int f[105],rp,n,s; int check(int k,int x) { f[0]=0; while (x) { f[++f[0]]=x%k; x=x/k; } int l=1,r=f[0]; while (f[r]==0 && r!=1) r--; while (l<r) { if (f[l]!=f[r]) return 0; l++; r--; } return 1; } int main() { scanf("%d%d",&n,&s); while (n!=0) { s++; rp=0; for (int k=2; k<=10; k++) if (check(k,s)) rp++; if (rp>=2) { printf("%d\n",s); n--; } } return 0; }
转载请注明原文地址: https://www.6miu.com/read-2628948.html

最新回复(0)