• USACO Section 1.2 Dual Palindromes 解题报告


    题目

    题目描述

    有一些数(如 21),在十进制时不是回文数,但在其它进制(如二进制时为 10101)时就是回文数。
    编一个程序,从文件读入两个十进制数N、S。然后找出前 N 个满足大于 S 且在两种以上进制(二进制至十进制)上是回文数的十进制数。

    数据范围

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

    样例输入

    3 25

    样例输出

    26
    27
    28

    解题思路

    按照Palindromic Squares的解题思路,我们直接枚举所有的数字,然后判断是否满足条件,满足条件的输出即可。

    解题代码

    /*
    ID: yinzong2
    PROG: dualpal
    LANG: C++11
    */
    #define MARK
    #include<cstdio>
    #include<cmath>
    #include<cstring>
    #include<algorithm>
    
    using namespace std;
    const int MAXN = 32;
    
    char alph[20] = {'0', '1', '2', '3', '4',
                     '5', '6', '7', '8', '9',
                     'A', 'B', 'C', 'D', 'E',
                     'F', 'G', 'H', 'I', 'J'
                    };
    int n,s;
    
    char *trans(int x, int base) {
        char *b = new char[MAXN];
        int len = 0;
        while(x) {
            b[len++] = alph[x%base];
            x /= base;
        }
        b[len] = '';
        return b;
    }
    
    bool judge(char s[]) {
        int len = strlen(s);
        for(int i = 0, j = len-1; i <= j; i++, j--) {
            if(s[i] != s[j]) {
                return false;
            }
        }
        return true;
    }
    
    int main() {
    #ifdef MARK
        freopen("dualpal.in", "r", stdin);
        freopen("dualpal.out", "w", stdout);
    #endif // MARK
        while(~scanf("%d%d", &n, &s)) {
            bool flag;
            //用cnt来保证一共找到n个符合要求的回文串
            for(int i = 1, cnt = 0; cnt < n; i++) {
                flag = false;
                //num用来记录一个数在2~10进制之间共有几种进制是回文串
                int num = 0;
                for(int j = 2; j <= 10; j++) {
                    if(judge( trans(s+i, j) )) {
                        num++;
                        if(num >= 2) {
                            flag = true;
                            cnt++;
                            break;
                        }
                    }
                }
                if(flag) {
                    printf("%d
    ", s+i);
                }
            }
        }
        return 0;
    }
    
  • 相关阅读:
    【原】基础篇:第九篇,Ext组件系列之field组件的基本用法
    为什么要返回byte[]
    Migrate Mysql to SQL Server 2005
    关于编码规范
    RPM删除包的时候报127错误
    邮政储蓄的线上故障
    string.replaceAll与StringUtils.replace
    EJB工作原理
    OJB Connection
    找工作
  • 原文地址:https://www.cnblogs.com/yinzm/p/5818102.html
Copyright © 2020-2023  润新知