• USACO section 1.2.4 Dual Palindromes


    1. 直接用了上道题的函数,另外,进制转换:

    string trans(int a)
    {
        string str1 = "";
        int tmp;
        while (a)
        {
            tmp = a % base;
            if (tmp < 10)
                str1 += tmp + '0';
            else
                str1 += tmp - 10 + 'A';
            a /= base;
        }
        return str1;
    }


    2. 我的代码:

    /*
    ID: dollar4
    PROG: dualpal
    LANG: C++
    */
    #include <iostream>
    #include <fstream>
    #include <string>
    #include <algorithm>
    #include <cstring>
    
    using namespace std;
    int n, s;
    bool checkp(string str)
    {
        int len = str.size();
        for (int i = 0; i < len; i++)
        {
            if (str[i] != str[len-1-i])
                return false;
        }
        return true;
    }
    string trans(int a, int b)
    {
        string str1 = "";
        int tmp;
        while (a)
        {
            tmp = a % b;
                str1 += tmp + '0';
            a /= b;
        }
        return str1;
    }
    int main()
    {
        ofstream fout ("dualpal.out");
        ifstream fin ("dualpal.in");
        int cnt = 0, i, tmp, j;
        string str;
        fin >> n >> s;
        for (i = s + 1; cnt != n; i++)
        {
            tmp = 0;
            for (j = 2; j < 11; j++)
            {
                str = trans(i, j);
                if (checkp(str))
                    tmp++;
                if (tmp >= 2)
                {
                    fout << i << endl;
                    cnt++;
                    break;
                }
            }
        }
        return 0;
    }
    

    3. 官方参考代码:

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <assert.h>
    
    /* is string s a palindrome? */
    int
    ispal(char *s)
    {
        char *t;
    
        t = s+strlen(s)-1;
        for(t=s+strlen(s)-1; s<t; s++, t--)
    	if(*s != *t)
    	    return 0;
    
        return 1;
    }
    
    /* put the base b representation of n into s: 0 is represented by "" */
    char*
    numbconv(char *s, int n, int b)
    {
        int len;
    
        if(n == 0) {
    	strcpy(s, "");
    	return s;
        }
    
        /* figure out first n-1 digits */
        numbconv(s, n/b, b);
    
        /* add last digit */
        len = strlen(s);
        s[len] = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"[n%b];
        s[len+1] = '\0';
        return s;
    }
    
    /* is number n a dual palindrome? */
    int
    isdualpal(int n)
    {
        int i, j, npal;
        char s[40];
    
        npal = 0;
        for(i=2; i<=10; i++)
    	if(ispal(numbconv(s, n, i)))
    	    npal++;
    
        return npal >= 2;
    }
    
    void
    main(void)
    {
        FILE *fin, *fout;
        int n, s;
    
        fin = fopen("dualpal.in", "r");
        fout = fopen("dualpal.out", "w");
        assert(fin != NULL && fout != NULL);
    
        fscanf(fin, "%d %d", &n, &s);
    
        for(s++; n>0; s++) {
    	if(isdualpal(s)) {
    	    fprintf(fout, "%d\n", s);
    	    n--;
    	}
        }
    
        exit(0);
    }




  • 相关阅读:
    转:python2.x 和 python3.x的区别
    迭代器
    C++学习笔记-预备知识
    phpstudy扩展mongoDB
    Linux gd库安装步骤说明
    Linux jpeglib库的安装
    github开源项目
    本地文件拖拽到虚拟机里,文件存储位置
    linux php 扩展安装
    CentOS6.10 Nginx无法解析php文件
  • 原文地址:https://www.cnblogs.com/dollarzhaole/p/3188920.html
Copyright © 2020-2023  润新知