noip1999 回文数 (模拟)
来源:互联网 发布:黑帽seo软件 编辑:程序博客网 时间:2024/05/17 00:00
A1121. 回文数
时间限制:1.0s 内存限制:256.0MB
总提交次数:702 AC次数:214 平均分:52.96
将本题分享到:
查看未格式化的试题 提交 试题讨论
试题来源
NOIP1999 提高组
问题描述
若一个数(首位不为零)从左向右读与从右向左读都一样,我们就将其称之为回文数。
例如:给定一个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(其中16进制数字为0-9与A-F),求最少经过几步可以得到回文数。
如果在30步以内(包含30步)不可能得到回文数,则输出“Impossible!”
例如:给定一个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(其中16进制数字为0-9与A-F),求最少经过几步可以得到回文数。
如果在30步以内(包含30步)不可能得到回文数,则输出“Impossible!”
输入格式
两行,N与M
输出格式
如果能在30步以内得到回文数,输出“STEP=xx”(不含引号),其中xx是步数;否则输出一行”Impossible!”(不含引号)
样例输入
9
87
87
样例输出
STEP=6
解析:需要注意的是,读入的数可能为16进制数。在这里我采用的是用一个数组来存储数字m的每一位,这样每次相加时,只需要将数组的顺序与逆序相加就能得到新的数。
代码:
#include<cstdio>#include<cctype>#include<cstring>#include<cstdlib>#define maxn 100using namespace std;int n,a[2][maxn];char s[maxn];bool huiwen(int x){ int i,j,k; i=1,j=a[x][0]; for(;i<j;i++,j--) if(a[x][i]!=a[x][j])return 0; return 1; }void readdata(){ int i,j,k; scanf("%d%s",&n,s); k=strlen(s); for(i=k-1;i>=0;i--) { if(isdigit(s[i]))j=s[i]-'0'; if(islower(s[i]))j=s[i]-'a'+10; if(isupper(s[i]))j=s[i]-'A'+10; a[0][++a[0][0]]=j; } if(huiwen(0)){printf("STEP=0\n");exit(0);} }void add(int x){ int i,j,k,last,y=1-x; a[x][0]=a[y][0]; for(last=0,i=1;i<=a[y][0];i++) { j=a[y][0]+1-i; a[x][i]=a[y][i]+a[y][j]+last; last=a[x][i]/n,a[x][i]%=n; } if(last>0)a[x][++a[x][0]]=last; }int main(){ readdata(); for(int i=1;i<=30;i++) { add(i%2); if(huiwen(i%2)){printf("STEP=%d\n",i);return 0;} } printf("Impossible!\n"); return 0;}
0 0
- noip1999 回文数 (模拟)
- 回文数(Noip1999 )
- ACM [NOIP1999] 回文数(水模拟)
- [NOIP1999]回文数
- [Rqnoj-148][NOIP1999]回文数
- 回文数-NOIP1999普及组
- luogu10125回文数[noip1999 Day1 T1]
- 蓝桥杯 回文数(模拟)
- 【模拟】【RQNOJ】回文数
- 【模拟】洛谷 P1015 回文数
- luogu1015 回文数 【1999提高】(模拟+高精)
- 1282 回文数猜想【简单模拟】
- HDU1282 回文数猜想 (简单模拟)
- 回文数(二)
- 回文数(Java)
- 栈(回文数)
- POJ1159:Palindrome(回文数)
- 回文数(函数自定义)
- 在Eclipse中安装Maven插件以及创建Maven项目
- Java学习个人笔记---Java数组内存
- button放在form表单导致点击按钮触发的ajax报错问题
- IOS 自动约束
- POJ 1564 Sum It Up
- noip1999 回文数 (模拟)
- HDU1179Ollivanders: Makers of Fine Wands since 382 BC.(最大匹配)
- Andorid 如何获取屏幕的大小
- java学习网站(国内外)
- 第44讲:Scala中View Bounds代码实战及其在Spark中的应用源码解析学习笔记
- 【LeetCode】122.Best Time to Buy and Sell Stock II
- CentOS 7 搭建vsFtp服务器 全教程
- ConcurrentHashMap 初认识
- 九度oj 1037