题目

问题描述

  一个正整数N被称为回文数,当且仅当N在十进制下,正着读和反着读是一样的。
  如12321是回文的,而12320不是。
  现在让你求出第K小的回文数。(第0小的是 1,第1小的是 2)

输入格式

  输入一个数K

输出格式

  一个数字N,为第K小的回文数。

样例输入

19

样例输出

111

数据规模和约定

  对于30% 的数据 K≤10000;
  对于100% 的数据 K≤109。

思路

以 4位数 为例,如果它是回文数的话,那么它的高2位与低2位对称。如:1221。这样的4位数有多少种呢?那就看有多少个不同的高2位,即从10到99,共90个数字。形成的回文数亦是从小到大的1001到9999。即4位的回文数共90个。

再以 5位数 为例,如果它是回文数的话,那么它的高2位与低2位对称。如:12321。这样的5位数有多少种呢?那就看有多少个不同的高2位,即从100到999,共900个数字。形成的回文数从10001到99999。即5位的回文数共900个。

这便是规律了。

如下表格,以n = 3为例,3位数的回文数有90个,最后一个3位回文数是999,是第107小回文数。

回文数的位数 n n 位数的回文数个数 最后一个 n 位回文数对应的k值
1位 9 8

2位

9 17
3位 90 107
4位 90 197
5位 900 1097
6位 900 1997
7位 9 000 10997
8位 9 000 19997
9位 90 000 109997
10位 90 000 199997
11位 900 000  1099997
12位 900 000 1999997
13位 9 000 000 10999997
14位 9 000 000 19999997
15位 90 000 000 109999997
16位 90 000 000 199999997
17位 900 000 000 1099999997
18位 900 000 000 1999999997

如何确定 第k个回文数的位数 是一个关键点,可以根据 k 值的大小,锁定位数,具体见代码。

代码

#include <iostream>
using namespace std;
#include <sstream>
#include <cmath>//数字转字符串
void i2s(string& str, int n)
{stringstream ss;ss << n;ss >> str;
}int main()
{int k,flag = 0;           //  flag表示回文数的位数cin >> k;if (k <= 8){cout << k + 1;return 0;}unsigned long ak[25] = { 0 };//首先建立一个数组,ak[0] = 8;ak[1] = 17;for (int i = 2;i <= 16;i++){ak[i] = ak[i-1] + 9 * pow(10,i / 2);if (ak[i] > k){flag = i + 1; //记下回文数所在的位置break;}}//  cout << "flag = "<<flag << endl;int temp = pow(10, (flag - 1) / 2) + k - ak[flag - 2] - 1;   //k = 2000时 2000 - 1997 = 3     flag = 7    1002001string ts;i2s(ts,temp);ts.resize(20);//   cout <<ts<<" " << flag<<"  here  " << endl;for (int i = 0;2 * i + 1 < flag; i++){ts[flag - i - 1] = ts[i];  //根据 对称性 生成回文数}cout << ts << endl;//  for (int i = 0; i <= 16; i++)
//      cout << ak[i] << endl;return 0;
}

总结

【废话】刚开始本来是想遍历至第k个回文数,发现无论怎么优化,都超时,只能得40分。而且意识到第1e9个回文数应该是一个17位的数,太大了。回文数的密度挺低的。想着这里面一定有什么规律。因为最近刚学筛法以及刚接触到生成法,想着能不能生成回文数。

第一次用resize函数。

蓝桥杯 算法提高 回文串相关推荐

  1. c语言oj题1923偶数之和,问题 1923: [蓝桥杯][算法提高VIP]学霸的迷宫 (BFS)

    题目描述 学霸抢走了大家的作业,班长为了帮同学们找回作业,决定去找学霸决斗.但学霸为了不要别人打扰,住在一个城堡里,城堡外面是一个二维的格子迷宫,要进城堡必须得先通过迷宫.因为班长还有妹子要陪,磨刀不 ...

  2. 【算法】双指针算法 ( 有效回文串 II )

    算法 系列博客 [算法]刷题范围建议 和 代码规范 [算法]复杂度理论 ( 时间复杂度 ) [字符串]最长回文子串 ( 蛮力算法 ) [字符串]最长回文子串 ( 中心线枚举算法 ) [字符串]最长回文 ...

  3. [蓝桥杯][算法提高VIP]夺宝奇兵-递推+记忆化搜索

    题目描述 在一座山上,有很多很多珠宝,它们散落在山底通往山顶的每条道路上,不同道路上的珠宝的数目也各不相同.下图为一张藏宝地图: 7 3 8 8 1 0 2 7 4 4 4 5 2 6 5 " ...

  4. [蓝桥杯][算法提高VIP]夺宝奇兵-dp

    题目描述 在一座山上,有很多很多珠宝,它们散落在山底通往山顶的每条道路上,不同道路上的珠宝的数目也各不相同.下图为一张藏宝地图: 7 3 8 8 1 0 2 7 4 4 4 5 2 6 5 " ...

  5. JAVA 蓝桥杯 算法提高 阮小二买彩票

    JAVA 蓝桥杯 算法提高 阮小二买彩票 资源限制 时间限制:1.0s 内存限制:512.0MB 问题描述 在同学们的帮助下,阮小二是变的越来越懒了,连算账都不愿意自己亲自动手了,每天的工作就是坐在电 ...

  6. [蓝桥杯][算法提高VIP]阮小二买彩票

    [蓝桥杯][算法提高VIP]阮小二买彩票 题目描述 在同学们的帮助下,阮小二是变的越来越懒了, 连算账都不愿意自己亲自动手了,每天的工作就是坐在电脑前看自己的银行账户的钱是否有变多.可是一段时间观察下 ...

  7. 10.python解答蓝桥杯省赛 回文数字

    10.python解答蓝桥杯省赛 回文数字 试题 历届试题 回文数字 提交此题 评测记录 资源限制 时间限制:1.0s 内存限制:256.0MB 问题描述 观察数字:12321,123321 都有一个 ...

  8. 【蓝桥杯算法提高VIP-开灯游戏(两种超易理懂解法:暴力/位操作(切换位))(纯正C语言代码)】

    蓝桥杯算法提高VIP-开灯游戏 题目描述 有9盏灯与9个开关,编号都是1~9. 每个开关能控制若干盏灯,按下一次会改变其控制的灯的状态(亮的变成不亮,不亮变成亮的). 具体如下: 第一个开关控制第二, ...

  9. [蓝桥杯][算法提高] 填充蛋糕

    [蓝桥杯][算法提高] 填充蛋糕 编程计算涂满高为2,半径为r的圆形蛋糕表面,需要多少表面积的奶油(只要涂上表面和侧面) 读入一个数r,输出需要奶油的表面积,结果保留一位小数 样例输入 5.0 样例输 ...

最新文章

  1. Vijos1683 有根树的同构问题
  2. 解决Win10下_findnext()异常
  3. python dict常用操作
  4. [痛并快乐着 国外开发者总结欧美游戏坑钱指南] 讀後感想
  5. 【项目实战课】微信小程序图像识别模型前后端部署实战
  6. iftop是一个很好用的实时流量监测程序,跟使用iftop查看linux连接进程占用的实时流量...
  7. 爬虫的增量式抓取和数据更新
  8. 苹果Mac上如何使用预览反转图片?
  9. java允许跨域设置
  10. 土壤类型空间分布数据介绍
  11. Debian安装ssh
  12. pyodbc linux 乱码,关于python:无法在Linux上安装pyodbc
  13. nyoj-动态规划-234-吃土豆-201308131021
  14. docker下载gcr.io镜像
  15. 不了心修改了/etc/sudoers原本的权限0777,进不去root,现在提供一个良好的解决办法~
  16. python matplotlib jupyter中绘图使用宋体
  17. 华为云会议,基于云计算的远程会议
  18. 数据分析师8大经典问题
  19. java计算机毕业设计夕阳红养老院系统源码+lw文档+系统+数据库
  20. U3D_Maze开发手记

热门文章

  1. 学生网站模板:旅游出行网站设计——旅游网设计(15页) HTML+CSS+JavaScript 学生DW网页设计作业成品 学生旅游网站模板
  2. 计算机游戏活动总结,关于亲子游戏活动总结最新三篇
  3. ESP8266与PS2通信
  4. 【bzoj4826】影魔
  5. 【代码篇】计算两张图片的偏移量
  6. 物联网计算机高铁工作,说说物联网在铁路当中的应用前景
  7. <UART 波形分析><1>基于RIGOL_DS1202ZE示波器分析串口数据
  8. 丁鹿学堂:css预处理器之less学习(一)
  9. 如何创建计算机桌面快捷方式,百度桌面-如何创建百度桌面快捷方式怎样在自己电脑桌面 – 手机爱问...
  10. C# 动态 条件 组合_3D模型+平滑,在PPT中实现动态呈现