这道题与上面那道题不同,这道题要我们从S + 1开始找出 N个数,这N个数在2到10进制
中的形式至少有两个回文数。我们只需依次判断,符合要求就输出即可。
/* ID:yucept21 LANG:C++ TASK:dualpal */ #include#include #include const int MAXN = 50; int N, S; char s[MAXN]; char B[] = "0123456789" ; bool ispal( char *s) { int len = strlen( s); for( int i = 0; i <= len / 2; i ++) if( s[i] != s[len - 1 - i] ) return false; return true; } int main() { freopen( "dualpal.in", "r", stdin); freopen( "dualpal.out", "w", stdout); scanf( "%d%d", &N, &S); int cnt = 0; for( int i = S + 1; cnt != N; i ++) { int ans = 0; for( int j = 2; j <= 10; j ++) { int k = i; int top = 0; memset( s, 0, sizeof s); while( k != 0) { s[top ++] = B[k % j]; k /= j; } bool flag = ispal( s); if( flag || top == 1) ans ++; if( ans == 2) { cnt ++; printf( "%d\n", i); break; } } } return 0; }