将1~n个整数按字典顺序进行排序,返回排序后第m个元素
2016-10-20 21:07
288 查看
给定一个整数n,给定一个整数m,将1~n个整数按字典顺序进行排序,返回排序后第m个元素。n最大可为5000000。字典排序的含义为:从最高位开始比较。1开头的数字排在最前面,然后是2开头的数字,然后是3开头的数字……最高位相同的数字,按同样的逻辑比较次高位……以此类推。
例:给定整数为n=13,m=5,那么字典排序结果为: [1,10,11,12,13,2,3,4,5,6,7,8,9] ,程序最终输出为13。
输入:m, n
输出:第m个数
先找到第m个数是1~9哪个数字开头。
然后找这个数字开头的所有数中不超过n的第m个数。
例:给定整数为n=13,m=5,那么字典排序结果为: [1,10,11,12,13,2,3,4,5,6,7,8,9] ,程序最终输出为13。
输入:m, n
输出:第m个数
#include<iostream> #include<string> #include<vector> #include<set> #include<map> #include<limits.h> #include<algorithm> #include<cstring> using namespace std; //返回以数字k开头,<=n的数的个数 int getNum(int n, int k) { int base = 1, sum = 0; while (n >= base * (k+1) -1) { sum += base; base *= 10; } if (n >= base * k) sum += n - base * k + 1; return sum; } int ans = 0; void getMth(int n, int m, int& k, int cur) { if (++k == m) { ans = cur; return; } for (int i = 0; i <= 9; i++) { int t = cur * 10 + i; if (t <= n) getMth(n, m, k, t); if (k >= m) return; } } int main() { int m, n, k = 0; cin >> m >> n; for (int i = 1; i <= 9; i++) { int num = getNum(n, i); if (num < m) m -= num; else break; } getMth(n, m, k, 1); cout << ans << endl; return 0; }
先找到第m个数是1~9哪个数字开头。
然后找这个数字开头的所有数中不超过n的第m个数。
相关文章推荐
- 如何利用外部列表元素顺序对源列表进行排序
- 对于一个整数数组排序,按从小到大顺序排序,数组的元素个数不定
- 在这里,我们将使用0,1和2的整数分别表示红色,白色和蓝色。将所有的0,1,2元素进行排序
- 根据数组中的值进行排序并且返回指定的元素个数
- 线性表的顺序表 实现,及应用-----西文排序+前m个元素和后n个元素进行整体互换+构造纯集合+有序表求纯集合+循环有序链表表示两集合的并集
- 定义一个一维数组,其元素个数从键盘中输入,元素的值为[100,200]的随机整数。 (1)输出数组的每个数 (2)对数组的数进行升序排序,输出排序后的数组元素 (3)从键盘上输入一个整数,查找该整数是
- 给定一个字符串数组{"nba","abc","cba","zz","qq","haha"},请按照字典顺序进行从小到大的排序。
- Java中对List集合内的元素进行顺序、倒序、随机排序的示例代码
- java 给定一个字符串数组。按照字典顺序进行从小到大的排序。
- Java中对List集合内的元素进行顺序、倒序、随机排序的示例代码
- 产生10个1-100的随机整数, * 把其中的奇数按照从小到大的顺序进行排序, * 并按照“1,2,3,、、、”这样的格式打印到d盘下的number.txt文档中。
- 将对象数组按照每一组对象的key值大小进行字典顺序(ASCII值大小)升序排序
- 如何对字典中的元素进行排序
- 数组中有字典、对字典进行升序,然后运用描述器进行排序,更改字典让中元素的信息iOS 6习题
- 已知一个几乎有序的数组,几乎有序是指,如果把数组排好顺序的话,每个元素移动的距离可以不超过k,并且k相对于数组来说比较小。请选择一个合适的排序算法针对这个数据进行排序。 给定一个int数组A,同时给定
- 那些年我们刷过的算法题(排序)---有一个只由0,1,2三种元素构成的整数数组,请使用交换、原地排序而不是使用计数进行排序
- Java中对List集合内的元素进行顺序、倒序、随机排序的示例代码
- 输入国家名按字典顺序进行排序
- Python编程对列表中字典元素进行排序的方法详解
- 对List中每个对象元素按时间顺序进行排序