排列字母stl

  1. #include<iostream>
  2. #include<string>
  3. #include<vector> //vector的头文件
  4. #include<algorithm> //next_permutation prev_permutation的头文件,排列无重复
  5. using namespace std;
  6. int main()
  7. {
  8. string s;
  9. vector<string> v; //容器内存有大小,以及容量
  10. int x,y,z,q;
  11. int i=0;
  12. while(cin>>x>>y>>z>>q,x||y||z||q)
  13. {
  14. if(i!=0)
  15. cout<<endl;
  16. i++;
  17. s.clear();
  18. v.clear();
  19. s.push_back(x+‘0‘);
  20. s.push_back(y+‘0‘);
  21. s.push_back(z+‘0‘);
  22. s.push_back(q+‘0‘);
  23. sort(s.begin(),s.end());
  24. if(s[0]!=‘0‘)
  25. v.push_back(s);
  26. //next_permutation 无序数字先从小到大排序,然后从小到大输出这些无序数字组成数字的结果
  27. //prev_permutation 无序数字先从大到小排序,然后从大到小输出这些无序数字组成数字的结果
  28. while(next_permutation(s.begin(),s.end()))
  29. {
  30. if(s[0]!=‘0‘)
  31. v.push_back(s);
  32. }
  33. //sort(v.begin(),v.end());
  34. int i=0;
  35. while(i<v.size())
  36. {
  37. while(i+1<v.size()&&v[i][0]==v[i+1][0])
  38. {
  39. cout<<v[i++]<<" ";
  40. }
  41. cout<<v[i++]<<endl;
  42. }
  43. }
  44. return 0;
  45. }
  46. /*
  47. Problem Description
  48. Ray又对数字的列产生了兴趣:
  49. 现有四张卡片,用这四张卡片能排列出很多不同的4位数,要求按从小到大的顺序输出这些4位数。
  50. Input
  51. 每组数据占一行,代表四张卡片上的数字(0<=数字<=9),如果四张卡片都是0,则输入结束。
  52. Output
  53. 对每组卡片按从小到大的顺序输出所有能由这四张卡片组成的4位数,千位数字相同的在同一行,同一行中每个四位数间用空格分隔。
  54. 每组输出数据间空一行,最后一组数据后面没有空行。
  55. Sample Input
  56. 1 2 3 4
  57. 1 1 2 3
  58. 0 1 2 3
  59. 0 0 0 0
  60. Sample Output
  61. 1234 1243 1324 1342 1423 1432
  62. 2134 2143 2314 2341 2413 2431
  63. 3124 3142 3214 3241 3412 3421
  64. 4123 4132 4213 4231 4312 4321
  65. 1123 1132 1213 1231 1312 1321
  66. 2113 2131 2311
  67. 3112 3121 3211
  68. 1023 1032 1203 1230 1302 1320
  69. 2013 2031 2103 2130 2301 2310
  70. 3012 3021 3102 3120 3201 3210
  71. */

来自为知笔记(Wiz)

附件列表

时间: 2025-01-13 00:14:21

排列字母stl的相关文章

ZUFE(周赛) 2326 交换字母(STL)

Time Limit: 1 Sec  Memory Limit: 128 MB Description 有一个长度为n的字符串(只包含小写字母),操作m次,每次操作交换两个字母,输出最终字符串. Input 多组输入,每组第一行为n,m表示字符串长度和操作数,1<n,m<=100000第二行为长度n的字符串,接下来m行,每行两个字符,中间空格隔开,表示要交换的两个字符. Output 每组数据输出一行,表示最终字符串. Sample Input 5 1 lehho h l 11 6 abaca

POJ 1833 排列【STL/next_permutation】

题目描述: 大家知道,给出正整数n,则1到n这n个数可以构成n!种排列,把这些排列按照从小到大的顺序(字典顺序)列出,如n=3时,列出1 2 3,1 3 2,2 1 3,2 3 1,3 1 2,3 2 1六个排列. 任务描述: 给出某个排列,求出这个排列的下k个排列,如果遇到最后一个排列,则下1排列为第1个排列,即排列1 2 3…n. 比如:n = 3,k=2 给出排列2 3 1,则它的下1个排列为3 1 2,下2个排列为3 2 1,因此答案为3 2 1. Input 第一行是一个正整数m,表示

hdu 1716 排列2(stl next_permutation)

http://acm.hdu.edu.cn/showproblem.php?pid=1716 考到题目直接套 next_permutation 没有注意到0不能为首位 结果wa了一整天 输出结构也略有些小坑 #include<cstdio> #include<cstring> #include<iostream> #include<algorithm> #include<cmath> using namespace std; int num[10

打印全排列和stl::next_permutation

打印全排列是个有点挑战的编程问题.STL提供了stl::next_permutation完美的解决了这个问题. 但是,如果不看stl::next_permutation,尝试自己解决,怎么做? 很自然地,使用递归的办法: 1. 单个元素的排列只有1个. 2. 多个元素的排列可以转化为: 以每个元素为排列的首个元素,加上其他元素的排列. 有了思路,就可以编码了. 第一个版本: void printAllPermutations(const std::string& prefix, int set[

UVa 140 (枚举排列) Bandwidth

题意较复杂,请参见原题=_=|| 没什么好说的,直接枚举每个排列就好了,然后记录最小带宽,以及对应的最佳排列. STL里的next_permutation函数真是好用. 比较蛋疼的就是题目的输入了.. 还有就是不明白,为什么19.20行注释哪错了?? 1 #include <bits/stdc++.h> 2 using namespace std; 3 4 const int maxn = 10; 5 6 int id[256], letter[maxn]; 7 char in[1000];

HDU 4771 Stealing Harry Potter&#39;s Precious (生成排列+枚举 + BFS)

Stealing Harry Potter's Precious Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 1982    Accepted Submission(s): 931 Problem Description Harry Potter has some precious. For example, his invisib

STL系列十一 随机三趣题——随机重排,文件中随机取一行,生成N个随机数

本文将介绍三个有趣的随机问题,分别是随机重新排列.从文件中随机取一行数据.生成N个随机数. 一.随机重新排列 将一个序列打乱并对其进行随机的重新排列,关键在于每种序列的被选择概率要一样,不然有失"公平".现在让我们来寻找如何保证每种序列被选择的概率一样大的算法. 首先假设这个数组只有二个元素,设数组a为{1, 2},显然这个数组只有二种可能的排列,要么是{1,2}要么是{2,1}.很容易想到一种方法--只要第二个元素有50%的概率与第一个元素交换即可.用代码表现下: if (rand(

R语言学习笔记

參考:W.N. Venables, D.M. Smith and the R DCT: Introduction to R -- Notes on R: A Programming Environment for Data Analysis and Graphics,2003. http://bayes.math.montana.edu/Rweb/Rnotes/R.html 前言:关于R 在R的官方教程里是这么给R下注解的:一个数据分析和图形显示的程序设计环境(A system for data

(全排列)数组的全排列问题

问题一:https://www.nowcoder.com/practice/f0069cfcd42649e3b6b0c759fae8cde6?tpId=46&tqId=29148&tPage=3&rp=3&ru=/ta/leetcode&qru=/ta/leetcode/question-ranking 这个题目意思是给定一个排列数组,然后要求出下一个排列的数组.比如说1234->1243    1243->1324等等.这个题目是一个全排列的题目,但是