博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
字符串或数组全排列的三种方法
阅读量:6616 次
发布时间:2019-06-25

本文共 1652 字,大约阅读时间需要 5 分钟。

先看最简单的一种:

void perm2(int *arr, int n, int len){    for (int i = 0; i < len; i++)    {        for (int j = 0; j < len; j++)        {            for (int k = 0; k < len; k++)            {                if ((i != k) && (i != j) && (j != k))                {                    cout <
<
<< arr[k]<

另一种:递归,用一个数组标记数字是否被用过

#include
using namespace std;#define N 3int used[N] = { 0 };//标记int num[N];//结果int mat[N] = { 1, 2, 3};//原来的数据void shown(int ceng){ if (ceng >= N) { for (int i = 0; i < N; i++) { printf("%4d", num[i]); } printf("\n");//显示数据 } else { for (int i = 0; i < N; i++) { if (!used[i]) { used[i] = 1;//代表用过 num[ceng] = mat[i];//写入结果 shown(ceng + 1); used[i] = 0;//用完了 } } }}int main(){ shown(0); cout << coun << endl; system("pause"); return 0;}

1.先将当前字符串打印出来

2.将倒数第二个字符后移
3.将字符串打印出来
4.倒数第三个字符调用上过程
5.第一个字符调用以上过程

#include
using namespace std;void perm1(int *arr, int n,int len){ if (n ==len) { for (int i = 0; i < len; i++) { cout << arr[i] << " "; } cout << endl; } else { for (int pInt = n; pInt < len; pInt++) { swap(arr[n], arr[pInt]); perm1(arr, n + 1, len); swap(arr[n], arr[pInt]); } }}int main(){ int arr[] = { 1, 2, 3}; int len = sizeof(arr) / sizeof(arr[0]); perm2(arr,0,len); cout << coun << endl; system("pause");}

转载于:https://www.cnblogs.com/readlearn/p/10806516.html

你可能感兴趣的文章
CSS3边框
查看>>
Spring事务隔离级别,事务传播行为
查看>>
CRC是什么?
查看>>
容器和物理机的文件共享
查看>>
[硬件]_ELVE_VS2015下opencv3.3的配置问题
查看>>
每次看完羽毛球赛
查看>>
Storm介绍及核心组件和编程模型
查看>>
在android studio中配置运行时签名
查看>>
第一章练习题
查看>>
三、JVM垃圾回收1(如何寻找垃圾?)
查看>>
robotframwork数据库测试(一)——pymysql与pyodbc
查看>>
Java EE (14) -- SSH配置
查看>>
Java Web Services (0) - Overview
查看>>
vue2组件之间双向数据绑定问题
查看>>
linux scp远程拷贝文件及文件夹
查看>>
【原创】Loadrunner使用json格式请求数据并参数化
查看>>
MySQL导入SQL文件过大或连接超时的解决办法
查看>>
Java开发命名规范总结
查看>>
机器学习_生成式模型与判别式模型
查看>>
redhat5.8 alt+ctrl+f1 黑屏
查看>>