以前的时候的面试题,然后被鄙视了。

题目就是给定一系列数字,输出这些数字的全排列(不一定是数字)。下面的代码只当数字来处理。

 1 // 计算全排列的递归调用函数
 2 vector<vector<int> >  FullPermutation(vector<int> &vectin, int arrayinnum)
 3 {
 4
 5     if (arrayinnum == 1)
 6     {
 7         vector<vector<int> > arrayout(1);
 8         arrayout[0].resize(1);
 9         arrayout[0].at(0) = vectin.at(0);
10         vectin.erase(vectin.begin());
11         return arrayout;
12     }
13     else
14     {
15         vector<vector<int> > vecttemp = FullPermutation(vectin, arrayinnum - 1);
16         vector<vector<int> > vectout(arrayinnum * vecttemp.size());
17
18         int i = 0;
19         for (vector <vector <int> >::iterator iter = vecttemp.begin(); iter < vecttemp.end(); iter++)
20         {
21             for (int j = 0; j < arrayinnum; j++)
22             {
23                 vectout[i] = *iter;
24                 vectout[i].insert(vectout[i].begin() + j, vectin.front());
25                 i++;
26             }
27         }
28
29         vectin.erase(vectin.begin());
30         vecttemp.clear();
31         return vectout;
32     }
33 }
34
35 // 得到全排列的函数
36 vector<vector<int> > getFullPermutation(int* datain, int datanum)
37 {
38     vector<int> vectin(datanum);
39     for (int i = 0; i < datanum; i++)
40     {
41         vectin.at(i) = datain[i];
42     }
43
44     vector<vector<int> > vectout = FullPermutation(vectin, datanum);
45
46     vectin.clear();
47
48     return vectout;
49 }

下面是测试函数:

 1 int _tmain(int argc, _TCHAR* argv[])
 2 {
 3     const int num = 4;
 4     int arrayin[num] = {1, 2,3,4};
 5
 6     vector<vector<int> > perRes = getFullPermutation(arrayin, num);
 7
 8     for (vector <vector <int> >::iterator iter = perRes.begin(); iter < perRes.end(); iter++)
 9     {
10         for (vector <int>::iterator it = (*iter).begin(); it < (*iter).end(); it++)
11         {
12             cout << *it << " ";
13         }
14         cout << endl;
15     }
16
17     perRes.clear();
18
19     return 0;
20 }

上面测试函数的结果:

 1 4 3 2 1
 2 3 4 2 1
 3 3 2 4 1
 4 3 2 1 4
 5 4 2 3 1
 6 2 4 3 1
 7 2 3 4 1
 8 2 3 1 4
 9 4 2 1 3
10 2 4 1 3
11 2 1 4 3
12 2 1 3 4
13 4 3 1 2
14 3 4 1 2
15 3 1 4 2
16 3 1 2 4
17 4 1 3 2
18 1 4 3 2
19 1 3 4 2
20 1 3 2 4
21 4 1 2 3
22 1 4 2 3
23 1 2 4 3
24 1 2 3 4

测试函数改成如下:

 1     const int num = 3;
 2     int arrayin[num] = {1, 2,3};
 3
 4     vector<vector<int> > perRes = getFullPermutation(arrayin, num);
 5
 6     for (vector <vector <int> >::iterator iter = perRes.begin(); iter < perRes.end(); iter++)
 7     {
 8         for (vector <int>::iterator it = (*iter).begin(); it < (*iter).end(); it++)
 9         {
10             cout << *it << " ";
11         }
12         cout << endl;
13     }
14
15     perRes.clear();

运行结果如下:

1 3 2 1
2 2 3 1
3 2 1 3
4 3 1 2
5 1 3 2
6 1 2 3

说明:

1 不太会使用vector,当做是练手。

2 此程序没有处理有重复的数字的情况。

3 如果改成其他类型,也可以,只需要把vector<int>改成其他对应类型就行了。没怎么使用过模板,因而此处就不使用了。

转载于:https://www.cnblogs.com/darkknightzh/p/4378444.html

(原)给定输入,输出全排列相关推荐

  1. PTA—输出全排列 (20分) 递归回溯思想

    PTA-输出全排列 (20分) 递归回溯思想 题目要求: 请编写程序输出前n个正整数的全排列(n<10),并通过9个测试用例(即n从1到9)观察n逐步增大时程序的运行时间. 输入格式: 输入给出 ...

  2. 计算机组成原理第7章-输入/输出系统

    写在前面:本文参考王道论坛主编的 计算机组成原理单科教材. 文章目录 7.1I/O系统基本概念 7.2 外部设备 7.3 I/O接口 7.4 I/O方式 7.4.1 程序查询方式 7.4.2 程序中断 ...

  3. 7-177 输出全排列 (20 分)

    7-177 输出全排列 (20 分) 请编写程序输出前n个正整数的全排列(n<10),并通过9个测试用例(即n从1到9)观察n逐步增大时程序的运行时间. 输入格式: 输入给出正整数n(<1 ...

  4. C 输入 输出——Day03

    当我们提到输入时,这意味着要向程序填充一些数据.输入可以是以文件的形式或从命令行中进行.C 语言提供了一系列内置的函数来读取给定的输入,并根据需要填充到程序中. 当我们提到输出时,这意味着要在屏幕上. ...

  5. C++编程:输入/输出 I/O

    概要 C++ 标准库提供了一组丰富的输入/输出功能,本博客主要讨论 C++ 编程中最基本和最常见的 I/O 操作. C++ 的 I/O 发生在流中,流是字节序列.如果字节流是从设备(如键盘.磁盘驱动器 ...

  6. 计算机组成原理 | 第八章《计算机的外围设备》、第九章《输入/输出系统》 学习笔记

    计算机组成原理 | 第八章<计算机的外围设备>.第九章<输入/输出系统> 学习笔记 引言 & 声明 第一章 计算机系统概论 第二章 计算机中数据的表示方法 第三章 运算 ...

  7. C基础学习之C 输入 输出

    目录 标准文件 getchar() & putchar() 函数 gets() & puts() 函数 scanf() 和 printf() 函数 当我们提到输入时,这意味着要向程序填 ...

  8. 计算机组成原理——输入/输出系统の选择题整理

    I/O接口 1.下列功能中,属于I/O接口的功能是() a.数据格式的转换 b.I/O过程中错误与状态检测 c.I/O操作的控制与定时 d.与主机和外设通信 A.a.d B.a.c.d C.a.b.d ...

  9. C语言基础之4:字符串和格式化输入/输出

    Tips1 函数:strlen() 关键字:const 字符串 如何创建.存储字符串 如何使用strlen()函数获取字符串的长度 用C预处理器指令#define和ANSIC的const修饰符创建符号 ...

  10. 输出全排列(递归非递归)

    递归算法:(当输入中数字有重复数字时会重复输出) 假设总共有n个元素,其核心是:将每个元素放到余下n-1个元素组成的队列最前方,然后对剩余元素进行全排列,依次递归下去. 比如:1 2 3 首先将1放到 ...

最新文章

  1. Google App Engine使用简介
  2. javascript原生事件句柄、BOM、DOM对象属性方法总结
  3. dos命令集--江南技术联盟
  4. SQL server置疑数据库修复
  5. 基于Matlab人脸识别(PCA算法)
  6. 正确将博客网页保存为pdf
  7. 信道检测手机软件 ios_【对讲机的那点事】宝峰UV5R对讲机上中继台的信道存储设置方法...
  8. Spark Core实战:解析Tomcat日志
  9. CSS之九宫格面试题
  10. octobercms mysql_在Ubuntu 18.04/Debian 9上安装October CMS
  11. 100 位测试工程师的 2018 年度关键词与 2019 展望
  12. 算术左、右移位与逻辑左、右移位,右移一位和除二的区别、算术溢出
  13. 去除 csv 文件中的重复行
  14. python 线程终止后再启动
  15. Gank英雄,意为Dota中的偷袭、包抄、围杀!
  16. 7-224 sdut-C语言实验-排序问题7-223 sdut-C语言实验-求阶乘(循环结构)
  17. 菜鸟程序员自我修养心得
  18. 嵌入式操作系统介绍分析
  19. Cache数据库ECP梳理
  20. Python 求圆的面积

热门文章

  1. js的BOM对象完全解析
  2. 通过点击热区,有个href 跳到servlet,怎么把页面上的值传到servlet里面?
  3. hadoop hive hbase 集群搭建
  4. mysql创建表的时候,字段尽量不要为NULL
  5. 网编编程必看书籍:unix网络编程
  6. C十三:strcmp函数,比价字符串
  7. 多表操作,常用非常用字段
  8. 【297天】我爱刷题系列056(2017.11.29)
  9. Gradle 配置spring boot启动
  10. Cucumber入门之_World