有1,2,3,...,n,n<=9,这n个数全排列,从小到大排好,计算第k个数是什么
2011-11-08 14:59
295 查看
从高位到低位依次选择
int findKthNumber(int n,long k){ if(n<1||n>9||k<1) return -1; if(n==1){ if(k==1){ cout<<"1"<<endl; return 0; }else{ return -1; } } long *counts = new long ; bool *select = new bool ; memset(select,0,n*sizeof(bool)); counts[0] = 1; for(int i=1;i<n;++i){ counts[i]=counts[i-1]*(i+1);//每个阶乘的个数 } if(k>counts[n-1]){//超出最大范围 delete[] counts; delete[] select; return -1; } long cur = 0; int notSelectCount = 0; int j=0; for(int i=0;i<n-1;i++){//依次从高位开始输出 cur = (k-1)/counts[n-2-i]; notSelectCount = 0; for(j =0;j<n;j++){ if(!select[j]){//数字在前面没有输出 ++notSelectCount; if(notSelectCount==cur+1){ break; } } } select[j] = true; cout<<j+1; k -= cur*counts[n-2-i]; } for(j=0;j<n;j++){//最后一个数字 if(!select[j]){ cout<<j+1<<endl; break; } } delete[] counts; counts = NULL; delete[] select; select = NULL; return 0; }
相关文章推荐
- 什么是云计算?
- html页面中,<是什么?为什么用<代替<号?
- 什么是住宅的建筑面积?它是如何计算的
- 假设一个大小为100亿个数据的数组,该数组是从小到大排好序的,现在该数组分成若干段,每个段的数据长度小于20「也就是说:题目并没有说每段数据的size 相同,只是说每个段的 size < 20 而已」
- greater<int>()表示内置类型从大到小排序,less<int>()表示内置类型从小到大排序
- asp.net中,<%#%>,<%=%>和<%%>分别是什么意思,有什么区别
- c++中#include<>中都能加什么?有什么用?
- web.xml中出现<servlet-name>default</servlet-name>是什么意思?
- 计算科学的根本问题:什么能被有效地自动化,即对象的能行性问题(转)
- 使用我的编译器,下面的代码 int i=7; printf("%d\n", i++ * i++); 返回 49?不管按什么顺序计算, 难道不该打印出56吗?
- 什么是云计算
- >>和<<运算符的计算方法
- 【LeetCode41-50】找出丢失最小正整数,计算蓄水量,检测?*匹配(44),跳跳棋,全排列,矩阵逆转,颠倒字母重新排序(auto,set/multiset,vector初始化),n次方
- 【'>' '>>' '<' '1' '2' ‘<<’】这些是什么???
- 什么是云计算(Cloud Computing)微软、谷歌和IBM三家“云”的差异
- <数字签名是什么?> 图片理解数字签名
- 云计算 appfog,heroku,openshift都是什么?
- 盒子模型的宽度计算问题, 有什么问题,及解决方案
- OpenGL ES 同样的灯光计算在顶点着色器和在片元着色器中计算有什么不同
- 编写一个在1,2,…,9(顺序不能变)数字之间插入+或-或什么都不插入,使得计算结果总是100的程序