关于全排列升降序的一些思考
2017-03-03 21:02
363 查看
在练习 《ADV-66 算法提高 阮小二买彩票》问题所求 “组成正整数N的所有位数的全排列,这些排列按升序输出,每个排列占一行。” 此题与 《排列数(输出0~9的全排列)-算法提高》中所求问题 “求0~9十个数的全排列中的第n个(第1个为0123456789) ”是一样的。
此处可以利用 在algorithm里面中的next_permutation函数(该函数可以自动实现升序全排列);同样, prev_permutation()函数与 next_permutation函数相反,实现 降序全排列
。
问题描述
0、1、2三个数字的全排列有六种,按照字母序排列如下:
012、021、102、120、201、210
输入一个数n
求0~9十个数的全排列中的第n个(第1个为0123456789)。
输入格式
一行,包含一个整数n
输出格式
一行,包含一组10个数字的全排列
样例输入
1
样例输出
0123456789
数据规模和约定
0 < n <= 10!
#include <iostream>
#include <algorithm>
using namespace std;
int main() {
string s = "0123456789";
int n;
cin >> n;
int cnt = 1;
do {
if(cnt == n) {
cout << s;
break;
}
cnt++;
}while(next_permutation(s.begin(), s.end()));
return 0;
}
此处可以利用 在algorithm里面中的next_permutation函数(该函数可以自动实现升序全排列);同样, prev_permutation()函数与 next_permutation函数相反,实现 降序全排列
。
算法提高 阮小二买彩票 问题描述 在同学们的帮助下,阮小二是变的越来越懒了,连算账都不愿意自己亲自动手了,每天的工作就是坐在电脑前看自己的银行账户的钱是否有变多。可是一段时间观察下来,阮小二发现自己账户的钱增长好慢啊,碰到节假日的时候连个铜板都没进,更郁闷的是这些天分文不进就算了,可恨的是银行这几天还有可能“落井下石”(代扣个人所得税),看着自己账户的钱被负增长了,阮小二就有被割肉的感觉(太痛苦了!),这时阮小二最大的愿望无疑是以最快的速度日进斗金,可什么方法能够日进斗金呢?抢银行(老本行)?不行,太危险,怕有命抢没命花;维持现状?受不了,搂钱太慢了!想来想去,抓破脑袋之后,终于想到了能快速发家致富的法宝----买彩票,不但挣了钱有命花,运气好的话,可以每天中他个几百万的,岂不爽哉!抱着这种想法,阮小二开始了他的买彩票之旅。想法是“好的”(太天真了OR 太蠢了),可是又发现自己的数学功底太差,因为不知道数字都有哪些组合排列?那现在就请同学们写个递归程序,帮助阮小二解决一下这个问题吧! 输入格式 不超过6位数的正整数N,注意:构成正整数N的数字可重复 输出格式 组成正整数N的所有位数的全排列,这些排列按升序输出,每个排列占一行。 注意:输出数据中不能有重复的排列 样例输入 123 样例输出 123 132 213 231 312 321 样例输入 3121 样例输出 1123 1132 1213 1231 1312 1321 2113 2131 2311 3112 3121 3211 样例输入 4003 样例输出 0034 0043 0304 0340 0403 0430 3004 3040 3400 4003 4030 4300 #include <iostream> #include <algorithm> using namespace std; int main() { string s; cin >> s; int len = s.length(); sort(s.begin(), s.end()); do { cout << s << endl; }while(next_permutation(s.begin(), s.end())); return 0; }
问题描述
0、1、2三个数字的全排列有六种,按照字母序排列如下:
012、021、102、120、201、210
输入一个数n
求0~9十个数的全排列中的第n个(第1个为0123456789)。
输入格式
一行,包含一个整数n
输出格式
一行,包含一组10个数字的全排列
样例输入
1
样例输出
0123456789
数据规模和约定
0 < n <= 10!
#include <iostream>
#include <algorithm>
using namespace std;
int main() {
string s = "0123456789";
int n;
cin >> n;
int cnt = 1;
do {
if(cnt == n) {
cout << s;
break;
}
cnt++;
}while(next_permutation(s.begin(), s.end()));
return 0;
}
相关文章推荐
- 关于防止微信投票刷票行为的一些思考
- 关于产品的一些思考——四季凯芯之问我
- 关于最近重构代码的一些思考
- 关于产品的一些思考——CSDN博客
- [体感游戏]关于体感游戏的一些思考(一)--- 开篇和“随身”物件
- [体感游戏]关于体感游戏的一些思考(六)--- 飞行
- 关于javascript的undefined和null的一些思考
- 关于视频会议的一些思考
- 关于学习的一些思考
- 关于学习的一些思考
- java学习笔记--关于interface和abstract的一些思考
- 关于SOA的一些深度思考
- 关于代码质量的一些思考
- 关于大三找实习的一些思考
- 一些关于测试的思考
- 关于sessions.ser文件的一些思考
- 关于反码取值的一些思考
- 关于计算机教育的一些思考
- 关于产品运营的一些思考
- 关于产品或服务的一些思考