USACO 1.2 Dual PalinDromes (递归判断回文)

来源:互联网 发布:安卓app源码如何修改 编辑:程序博客网 时间:2024/06/04 18:16
#include <stdio.h>#define DEBUG 0#define TESTCASES 8int 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 DEBUGint 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);#endifscanf("%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}#endifreturn 0;}

0 0