usaco Dual Palindromes

/*
ID: modengd1
PROG: dualpal
LANG: C++
*/
#include <iostream>
#include <stack>
#include <stdio.h>
#include <string.h>

using namespace std;
char leter[20]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F','G','H','I','J'};
//进制转换,将x转化为base进制的数的字符串表示形式存入out数组
void changetheBase(int x,int base,char out[60])
{
    stack<char> S;
    int i=0;
    while(x>0)
    {
        S.push(leter[x%base]);
        x/=base;
    }
    for(i=0;!S.empty();i++)
    {
        out[i]=S.top();
        S.pop();
    }
    out[i]=0;
}
//检测一个以'\0'结尾的字符串是不是回文串
bool isPalindromic(char input[60])
{
    int temp[60];
    int len=strlen(input);
    for(int i=0;i<len;i++)
    {
        temp[len-i-1]=input[i];
    }
    for(int i=0;i<len;i++)
    {
        if(input[i]!=temp[i])
            return false;
    }
    return true;
}
bool islegal(int x)
{
    char out[60];
    int ans=0;

    for(int i=2;i<=10;i++)
    {
        changetheBase(x,i,out);
        if(isPalindromic(out))
        {
            ans++;
        }
        if(ans>=2)
            return true;
    }
    return false;
}
int main()
{
    int N,S,ans;
    freopen("dualpal.in","r",stdin);
    freopen("dualpal.out","w",stdout);
    scanf("%d%d",&N,&S);
    ans=0;
    for(int i=S+1;ans<N;i++)
    {
        if(islegal(i))
        {
            cout<<i<<endl;
            ans++;
        }
    }
    return 0;
}

  

posted on 2015-08-26 22:50  insaneman  阅读(126)  评论(0)    收藏  举报

导航