#include <stdio.h>
#define DEBUG 0
#define TESTCASES 8
int N,S;
void transform(int num, int base, char *str, int *len){
int quotient = 0;
int i = 0;
while ( (quotient = num / base) != 0){
str[i++] = '0' + (num % base);
num = quotient;
}
str[i++] = '0' + (num % base);
str[i] = '\0';
*len = i;
}
int compare(char *pLeft, char *pRight){
if (pLeft >= pRight)
return 1;
if (*pLeft == *pRight){
pLeft++;
pRight--;
//注意不要直接写成return compare(pLeft++, pRight--)
return compare(pLeft, pRight);
}
else
return 0;
}
int main(){
#if DEBUG
int testCase;
for (testCase = 1; testCase <= TESTCASES; testCase++){
char inputFileName[20] = "inputX.txt";
inputFileName[5] = '1' + (testCase - 1);
freopen(inputFileName, "r", stdin);
printf("\n#%d\n", testCase);
#endif
scanf("%d %d", &N, &S);
int num = S + 1;
int numOfPalindromics = 0;
while (numOfPalindromics < N){
int count = 0;
int base;
for (base = 2; base <= 10; base++){
char str[100];
int len = 0;
transform(num, base, str, &len);
if (compare(&str[0], &str[len - 1]) == 1)
if (++count == 2){
numOfPalindromics++;
printf("%d\n", num);
break;
}
}
num++;
}
#if DEBUG
}
#endif
return 0;
}
USACO 1.2 Dual PalinDromes (递归判断回文)
最新推荐文章于 2019-01-29 22:21:53 发布