luogu10125回文数[noip1999 Day1 T1]

原创 2016年08月28日 22:12:40

题目描述

若一个数(首位不为零)从左向右读与从右向左读都一样,我们就将其称之为回文数。

例如:给定一个10进制数56,将56加65(即把56从右向左读),得到121是一个回文数。

又如:对于10进制数87:

STEP1:87+78  = 165                  STEP2:165+561 = 726

STEP3:726+627 = 1353                STEP4:1353+3531 = 4884

在这里的一步是指进行了一次N进制的加法,上例最少用了4步得到回文数4884。

写一个程序,给定一个N(2<=N<=10,N=16)进制数M(100位之内),求最少经过几步可以得到回文数。如果在30步以内(包含30步)不可能得到回文数,则输出“Impossible!”

输入输出格式

输入格式:

两行,分别是N,M。

输出格式:

STEP=ans

输入输出样例

输入样例#1:
10
87
输出样例#1:
STEP=4
思路:暴力枚举30次,再仍上高精度加法(将mod 10 改成 mod N即可)。

注意事项:单纯思路有点简单了,说说要注意的地方吧,这题确实有一些地方会让人卡住。

1)注意读入后,将字符串数组转化为int型数组时,要考虑处理16进制数的情况,所以判断该字符是否是字母,若是,转化成10~15(16进制下的A~F)

2)最开始时要判断不需要头尾相加时就已经是回文数的情况。

#include<cstdio>
#include<cstring>
using namespace std;
int n,len,a[11111],b[11111],c[11111];
bool jud(int *X)
{
    for(int i=1;i<=len/2;i++)
        if(X[i]!=X[len-i+1])return 0;
    return 1;
}
void add_num()
{
    int x=0;
    for(int i=1;i<=len;i++){
        x+=a[i]+b[i];
        c[i]+=x%n;
        x/=n;
    }
    while(x){c[++len]=x%n;x/=n;}
}
void solve()
{
    if(jud(a)){puts("STEP=0");return;}
    for(int k=1;k<=30;k++){
        memset(c,0,sizeof(c));
        for(int i=1;i<=len;i++)
            b[i]=a[len-i+1];
        add_num();
        if(jud(c)){printf("STEP=%d\n",k);return;}
        for(int i=1;i<=len;i++)
            a[i]=c[i];
    }
    puts("Impossible!");
}
int main()
{
    char cr[111];
    scanf("%d%s",&n,cr);
    len=strlen(cr);
    for(int i=0;i<len;i++){
        if('0'<=cr[i]&&cr[i]<='9')
            a[len-i]=cr[i]-48;
        if('A'<=cr[i]&&cr[i]<='Z')
            a[len-i]=cr[i]-55;
    }
    solve();
    return 0;
}


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

相关文章推荐

luogu1003铺地毯[noip2011 提高组 Day1 T1]

题目描述 为了准备一个独特的颁奖典礼,组织者在会场的一片矩形区域(可看做是平面直角坐标系的第一象限)铺上一些矩形地毯。一共有 n 张地毯,编号从 1 到n 。现在将这些地毯按照编号从小到大的顺序平行...

NOIP2016 提高组Day2 T1 组合数问题

题目描述 组合数表示的是从n个物品中选出m个物品的方案数。举个例子,从(1,2,3) 三个物品中选择两个物品可以有(1,2),(1,3),(2,3)这三种选择方法。根据组合数的定 义,我们可以给出计...

NOIP2016Day2T1组合数问题洛谷p2822解题报告

原题见洛谷(https://www.luogu.org/problem/show?pid=2822) NOIP第二天第一题用到了数论的知识: 50分算法 最暴力的做法是直接用公式,求阶乘...

NOIP2016Day2T1组合数问题(problem)

开头提示:本文章为作者原创,若有雷同,纯属巧合,谢谢! 注:组合数公式由于作者太懒而没有打出,因此带来的不便作者深表歉意! 【问题描述】 组合数表示的是从n个物品中选出m个物品的方案数。举个...

#NOIP 2014# day.1 T2 联合权值

题目和数据在评论中给出地址。或者自行在网上搜索,这里就不再给出。第一眼看起来很复杂。 所以我想了个对链、和树不同情况都分别处理的算法。。orz。。复杂度太高最后4组T了。。 所以。。转换思路。。联...

Noip 2013 Day1 T3 货车运输 启发式并查集树

题目大意:给一个图,求最大生成树,询问生成树上两个结点路径上最小的边权,若两点不可达输出-1。 这道题是很明显的LCA问题可以倍增写(详见http://blog.csdn.net/nkwbtb/art...

noip2016 Day1 T2:天天爱跑步(Lca+树上差分)

题目描述 小c同学认为跑步非常有趣,于是决定制作一款叫做《天天爱跑步》的游戏。«天天爱跑步»是一个养成类游戏,需要玩家每天按时上线,完成打卡任务。 这个游戏的地图可以看作一一棵包含 个结点和 条边的树...
  • KsCla
  • KsCla
  • 2016-12-02 21:19
  • 1048

[NOIP2015] day2 T1 跳石头

大家都很强,可与之共勉。NOIP2015】day2 跳石头 题目描述一年一度的“跳石头”比赛又要开始了!这项比赛将在一条笔直的河道中进行,河道中分布着一些巨大岩石。组委会已经选择好了两块岩石作为比赛...

NOIP2013 DAY1 T3

题目链接Kruskal+LCA求解 Kruskal求最大生成树 LCA查找两点间最小权值 上代码 #include #include #include #include #define MIN(a,b...

NOIP2013day1T3----货车运输(LCA+生成树)

NOIP2013day1T3----货车运输(LCA+生成树)
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)