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;
}


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

noip1999 回文数 (模拟)

A1121. 回文数 时间限制:1.0s   内存限制:256.0MB   总提交次数:702   AC次数:214   平均分:52.96 将本题分享到:      ...
  • yuyanggo
  • yuyanggo
  • 2015年08月15日 16:30
  • 1250

回文数组【无意间看到的题】

题目如下:给出一个数组 A[1..n],如果对于任意的 1
  • Fgaoshihao
  • Fgaoshihao
  • 2016年11月16日 11:13
  • 3248

最少需要删除多少个字符才能使字符串S变为回文串

最少需要删除多少个字符才能使字符串S变为回文串                         输入一个字符串,求最少需要删除多少个字符才能使字符串S变为回文串。 例如,输入“cabebaf”,则...
  • hunanly
  • hunanly
  • 2016年04月05日 08:13
  • 2450

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

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

【NOIP 1999 提高组 T1】拦截导弹(DP)

题目描述 Description 某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统。但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都不能高于前一发的高...
  • Loi_YZS
  • Loi_YZS
  • 2016年11月01日 14:43
  • 248

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

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

C++ & Pascal & Java ——NOIP2016提高组day2 t1——组合数问题

题目描述 组合数  表示的是从 n 个物品中选出 m 个物品的方案数。举个例子,从 (1,2,3) 三个物品中选择两个物品可以有 (1,2),(1,3),(2,3) 这三种选择方法。根据组合数的定义...
  • McDonnell_Douglas
  • McDonnell_Douglas
  • 2017年07月28日 15:18
  • 230

NOIP2016Day2T1组合数问题(problem)

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

组合数问题(NOIP2016提高组Day2T1)

【题目描述】 组合数表示的是从n个物品中选出m个物品的方案数。举个例子,从(1,2,3) 三个物品中选择两个物品可以有(1,2),(1,3),(2,3)这三种选择方法。根据组合数的定 义,我们可以给...
  • qq_31640513
  • qq_31640513
  • 2016年11月21日 12:10
  • 4944

NOIP2016 提高组Day2 T1 组合数问题

题目描述 组合数表示的是从n个物品中选出m个物品的方案数。举个例子,从(1,2,3) 三个物品中选择两个物品可以有(1,2),(1,3),(2,3)这三种选择方法。根据组合数的定 义,我们可以给出计...
  • qq_37042896
  • qq_37042896
  • 2016年12月14日 21:25
  • 118
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:luogu10125回文数[noip1999 Day1 T1]
举报原因:
原因补充:

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