zoukankan      html  css  js  c++  java
  • 算法竞赛入门经典 暴力求解法 简单枚举 7.1.4 双基回文数

    问题描述:如果一个正整数n至少在两个不同的进位制b1和b2下都是回文数(2<=b1,b2<=10),则称n是双基回文数(注意:回文数不能包含前导0)。

                       输入正整数S<10^6,输出比S大的最小双基回文数。

    样例输入:1600000

    样例输出:1632995

    分析:最自然的想法就是:从S+1开始,依次判断每个数是否为双基回文数,而在判断时要列举所有可能的基数(2~10),一切都是那么的”暴力“。然而令人意外的是,这样做对于S<10^6这样的小规模数据来说是足够快的。

    附上实现代码:

    #include<cstdio>
    #include<cstdlib>
    #include<iostream>
    #include<algorithm>
    #include<string.h>
    using namespace std;
    int fun(int x,int n)
    {
        int a[100],b[100];
        int k=0,i=0,j=0;
        for(i=0;;i++)
        {
            a[i]=x%n;
            x=x/n;
            if(x==0) break;
        }
        k=i;
        int flag=1;
        for (i=0;i<=k/2;i++)
        {
            if (a[i]!=a[k-i])
            {
               flag=0;
               break;
            }
        }
        if(flag==1)
            return 1;
        else
            return 0;
    }
    int main()
    {
        int n,i;
        while (scanf("%d",&n)==1)
        {
            for(;;n++) //枚举,找出最小的
            {
                int k=0;
                int flag = 0;
                for(i=2;i<=10;i++)
                {
                    if(fun(n,i)) k++;
                    if(k>=2){flag=1; break;}
                }
                if(flag)
                {
                     printf("%d
    ",n);
                     break;
                }
            }
        }
    }

    版权声明:本文为博主原创文章,未经博主允许不得转载。

  • 相关阅读:
    js实现全选反选功能
    seajs笔记
    延迟加载图片
    JavaScript 数组基本操作
    图片上传,头像上传
    命令模式
    动态加载js css 插件
    发布-订阅模式
    js 切换全屏
    JavaScript 经典之一 闭包
  • 原文地址:https://www.cnblogs.com/Tobyuyu/p/4965569.html
Copyright © 2011-2022 走看看